某些表为空时如何进行多个连接

时间:2018-03-17 13:59:46

标签: mysql sql join

我正在尝试将“查找数据”附加到主记录文本/说明字段,因此它看起来像这样:

这是说明文字

LookUpName1:
LookupValue1
LookupValueN

这与Inner Join一样正常

Select J.id, Concat('<b>LookUpName</b>:<br>',group_concat(F.LookUpValue SEPARATOR '<br>')) 
from MainTable J Inner Join
     LookUpTable L Inner Join
     LookUpValuesTable F
     On J.ID = L.JobID and F.ID = L.FilterID
Group by J.ID

但是我的目标是添加附加多个查找表,如果我将它们添加到内部联接中,我自然只会得到那些/所有LookupTable都有记录的记录。

另一方面,当我尝试JoinLeft Join时,我在Group by J.ID上收到错误。

我的目标是将任何现有的查找表值附加到所有描述中。现在我所能实现的只是返回包含所有Lookup表值的附加描述。

1 个答案:

答案 0 :(得分:0)

如果on条款位于&#34;右侧&#34;位:

select J.id,
       Concat('<b>LookUpName</b>:<br>', group_concat(F.LookUpValue separator '<br>')) 
from MainTable J left join
     LookUpTable L
     on J.ID = L.JobID left join
     LookUpValuesTable F
     on F.ID = L.FilterID
group by J.ID;

您的查询问题是MySQL(mis)功能。对于内部联接,on子句是可选的。不要问我为什么MySQL设计师认为inner joincross join在语法上应该是等价的。每个其他数据库都需要on的{​​{1}}子句。使用inner join表达cross join非常容易。

但是,on 1=1需要on子句,因此当您切换到left join时,编译器会出现非正统语法问题。真正的问题是缺少left join条款;这恰好出现在&#34;我还没有期待on。&#34;使用更加传统的语法,每个group by后跟join,可以解决问题。