我有四个不同的表,一个主SPECIAL
表只包含引用CONTRACT
和PHONE
表的id。
我的问题如下:
SELECT *
FROM `specials` specials
INNER JOIN `contract` contracts
ON specials.contract_id = contracts.id
INNER JOIN `phone` phones
ON specials.phone_id = phones.id
INNER JOIN `ugets` ugets
ON specials.id = ugets.special_id
目前,这只从
UGETS
表中获取一行,但我需要这个特定表中具有正确special_id
的所有行。有人能告诉我正确的方向吗?我似乎忍不住用谷歌搜索它。
最佳答案
您的查询看起来正确,除非您还需要所有行,而不管是否存在contract
或phone
。在这种情况下,您需要使用OUTER JOIN
或LEFT JOIN
而不是INNER JOIN
:
SELECT *
FROM `specials` specials
LEFT JOIN `contract` contracts
ON specials.contract_id = contracts.id
LEFT JOIN `phone` phones
ON specials.phone_id = phones.id
LEFT JOIN `ugets` ugets
ON specials.id = ugets.special_id
如果表中的字段没有指定特殊项的记录,则返回
NULL
,但如果表中的所有行都匹配,则显示该字段。请注意,这可能会对性能产生不利影响(可能会使在一个查询中获取所有四个表的好处失效)——您应该评估收益与成本的关系,看看是否仍然需要一个查询。