我有四个不同的表,一个主SPECIAL表只包含引用CONTRACTPHONE表的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的所有行。
有人能告诉我正确的方向吗?我似乎忍不住用谷歌搜索它。

最佳答案

您的查询看起来正确,除非您还需要所有行,而不管是否存在contractphone。在这种情况下,您需要使用OUTER JOINLEFT 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,但如果表中的所有行都匹配,则显示该字段。
请注意,这可能会对性能产生不利影响(可能会使在一个查询中获取所有四个表的好处失效)——您应该评估收益与成本的关系,看看是否仍然需要一个查询。

09-26 23:05