使用左连接连接多个表,其中一个连接表中不存在条目,不返回任何内容

问题描述 投票:0回答:1

我有4个表必须连接在一个以上的字段上,并且当表3没有数据时无法使它工作

T1

id primary key
user_id
mydata

Taq酶

id primary key
user_id
entry_id
mydata

TS

id primary key
user_id
entry_id
mydata

TCH

id primary key
user_id
entry_id
mydata

我想返回所有T1,其中搜索字符串匹配任何其他3个表:

SELECT DISTINCT(id) as id FROM T1
LEFT JOIN T2 ON (T1.user_id = T2.user_id AND T2.entry_id = T1.id)
LEFT JOIN T3 ON (T1.user_id = T3.user_id AND T3.entry_id = T1.id)
LEFT JOIN T4 ON (T1.user_id = T4.user_id AND T4.entry_id = T1.id)
AND (T1.mydata LIKE :s OR T2.mydata LIKE :s OR T3.mydata LIKE :s OR T4.mydata LIKE :s)

当所有表都有条目时查询有效,但是当说T3没有匹配entry_id的条目时,不返回任何内容。

我做错了什么,我似乎无法解决这个问题......请帮忙

mysql
1个回答
0
投票

我设法通过用WHERE替换AND来解决问题,所以这个:

SELECT DISTINCT(id) as id FROM T1
LEFT JOIN T2 ON (T1.user_id = T2.user_id AND T2.entry_id = T1.id)
LEFT JOIN T3 ON (T1.user_id = T3.user_id AND T3.entry_id = T1.id)
LEFT JOIN T4 ON (T1.user_id = T4.user_id AND T4.entry_id = T1.id)
AND (T1.mydata LIKE :s OR T2.mydata LIKE :s OR T3.mydata LIKE :s OR T4.mydata LIKE :s)

变为:

SELECT DISTINCT(id) as id FROM T1
LEFT JOIN T2 ON (T1.user_id = T2.user_id AND T2.entry_id = T1.id)
LEFT JOIN T3 ON (T1.user_id = T3.user_id AND T3.entry_id = T1.id)
LEFT JOIN T4 ON (T1.user_id = T4.user_id AND T4.entry_id = T1.id)
WHERE (T1.mydata LIKE :s OR T2.mydata LIKE :s OR T3.mydata LIKE :s OR T4.mydata LIKE :s)

似乎AND导致搜索条件成为最后一个左连接的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.