2014-01-10 45 views
1

我试图寻找表3的行具有在表1或表2 ID匹配该查询多个搜索与加盟

SELECT T1.*, T3.*,T2.* 
FROM (
    select id 
    from table1 
    where condition like '%field%') T1 
inner join table3 T3 
ON T3.id=T1.id 
left join (
    select id 
    from table2 
    where condition like '%field%') T2 
ON T3.id=T2.id 

如果表T1有比赛,但在表2不,查询作品好,但如果在table1中没有匹配,但在table2中查询不会显示任何结果。

有人可以帮助我吗?

感谢

+0

你有内部之间的连接T1和T3以及T3和T2之间的左连接。将你的内连接变成正确的连接。 – wxyz

+0

嗨,谢谢,但有正确的加入,显示与嵌套querys坏数学。看看AdrianBR的答案。 – Hanzo

回答

2

做左的连接,以避免不包括行,并添加你需要的可读性起见条件的地方,避免右连接和仅仅指刚使用正确的表顺序

SELECT T1.*, T3.*,T2.* 
FROM Table3 T3 

left join (
    select id 
    from table1 
    where condition like '%field%') T1 
ON T3.id=T1.id 

left join (
    select id 
    from table2 
    where condition like '%field%') T2 
ON T3.id=T2.id 

where t3.id is not null or t2.id is not null 
+0

with'where t1.id not null或t2.id not null'查询工作正常。谢谢 – Hanzo

+0

一些教程,以提高querys中的表顺序? – Hanzo

+0

只是谷歌的关系代数。约定是在写作时从最左边的表格开始。这是关于可读性和你能够遵循的逻辑,因为否则mysql本身不关心订单,并写出自己的执行计划 – AdrianBR