我有 3 个不同的表,我需要从其中 2 个中提取数据一次,从第三个中提取两次。这些表是jobs
、customers
和customers_attributes
。我正在尝试为特定工作提取数据,其中部分数据是有关拥有该工作的客户的信息。客户数据存储在customers_attributes
数据类型定义为与类型对应的整数的位置(为简单起见,此处使用字符串),然后内容字段包含数据本身。
customers_attributes
在这种情况下,我需要从与工作对应的客户对应的表中提取 2 行。'PhoneNumber' 的一行,'CustomerInfo' 的另一行。我对其中一个使用了 INNER JOIN,但是因为我不能为两者放置 WHERE 值,所以我对另一个使用了子查询。我认为这真的很讨厌,我相信必须有一种更清洁的方式来做到这一点:
SELECT jobs.*, customers.Name AS CustomerName,
customers_attributes.Content AS PhoneNumber,
( SELECT `Content`
FROM customers_attributes
WHERE Type = 'CustomerInfo' AND ForeignCustomer = jobs.Customer
LIMIT 1) AS CustomerInfo
FROM jobs
INNER JOIN customers ON jobs.Customer = customers.ID
INNER JOIN customers_attributes ON jobs.Customer = customers_attributes.ForeignCustomer
WHERE jobs.ID = $jobID AND customers_attributes.Type = 'PhoneNumber'
LIMIT 1
我应该提一下,如果客户有超过 1 个工作,则同一属性可能有多个行,理想情况下,此查询应该返回最新信息,或者与工作同时提交的信息(基于相应的身份证件)。