简体   繁体   English

使用左联接联接多个表(其中联接的表之一中不存在条目)不返回任何内容

[英]Joining multiple tables with left join where an entry doesn't exist in one of the joined tables returns nothing

I have 4 tables that have to be joined on more than a single field, and can't get it to work when table 3 has no data 我有4个表必须在多个字段上联接,并且当表3没有数据时无法使它工作

T1 T1

id primary key
user_id
mydata

T2 T2

id primary key
user_id
entry_id
mydata

T3 T3

id primary key
user_id
entry_id
mydata

T4 T4

id primary key
user_id
entry_id
mydata

I want to return all of T1 where a search string matches any of the other 3 tables: 我想返回所有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)

The query works when all tables have entries, but when say T3 has no entries matching entry_id, nothing is returned. 当所有表都有条目时,该查询有效,但是当说T3没有与entry_id匹配的条目时,则不返回任何内容。

What am I doing wrong, I can't seem to solve this... please help 我做错了什么,我似乎无法解决...请帮助

I managed to fix the problem by replacing AND with WHERE, so this: 我设法通过将AND替换为WHERE来解决此问题,因此:

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)

becomes: 变成:

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)

It seems the AND was causing the search criteria to become part of the last left join or something. 似乎AND导致搜索条件成为最后一个左连接的一部分。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM