加入mysql的问题

时间:2014-12-16 17:21:04

标签: mysql join

我有2个桌子,我正在尝试使用左连接加入它们

表1

hid    rid   uid    tie

1      61    566     23
2      62    322     21
3      63    455     65
4      63    223     29

表2

uhid    

322    
455    
223      
344

我想要的输出应该是

uid     tie
322     21
455     65
223     29
344     0 

我的查询是

select table1.uid,table1.tie from  table1 left join table2 on
table2.uhid = table1.uid   
where (table1.rid=61 or table1.rid=62 or table1.rid=63)  

但它给了我以下不希望的结果。

uid     tie
566     23
322     21
455     65
223     29
344     0  

我不希望566不被包括在内,因为它不包括在表2中虽然它是61并且它包含在where子句中。

非常感谢任何帮助。提前谢谢。

校正的

select table1.uid,table1.tie from  table2 left join table1 on
table2.uhid = table1.uid   
and (table1.rid=61 or table1.rid=62 or table1.rid=63) 

2 个答案:

答案 0 :(得分:1)

你应该使用RIGHT JOIN。您可能需要浏览this link

答案 1 :(得分:0)

使用right join是一个很好的第一步,但它仍然无法为您提供所需的结果。

select table2.uhid,ifnull(table1.tie, 0) from  table1 right join table2 on
table2.uhid = table1.uid   
where (table1.rid=61 or table1.rid=62 or table1.rid=63 or table1.rid is null);

也许您需要一些帮助来了解左/右连接是如何工作的。

左连接将确保包含连接左侧表中的每一行,而不管on子句如何(右侧相似)。 on子句仅确定其他表是否具有列值。唯一的问题是当on子句失败时,其他表的列将具有需要考虑的空值

ifnull(table1.tie, 0)

和这个

or table1.rid is null

帐户

这是一个sql小提琴演示

http://sqlfiddle.com/#!2/7b6b67/7