MySQL:JOIN表B,但如果表B中没有匹配则返回表A.

时间:2015-11-17 22:55:31

标签: mysql sql

这是我遇到的问题的抽象。我有两张桌子:

id  name
--  ------
1   Frank
2   Tom

id  bar  drink
--  ---  -----
1    5   water
1    5   beer
1    6   wine
2    5   milk

我想选择id 1,bar 5,然后在酒吧5点找到Frank和他所有的饮料。

id: 1, name: Frank, bar: 5, drink: water
id: 1, name: Frank, bar: 5, drink: beer
id: 1, name: Frank, bar: 5, drink: wine 

但是当我选择id 1和bar 9时,我想让Frank没有饮料。

id: 1, name: Frank

我尝试使用左连接联合右连接,但我总是在其他酒吧得到不必要的饮料。我正在尝试用MySQL进行此查询。

1 个答案:

答案 0 :(得分:1)

这是一个left join查询,经过仔细过滤:

select t1.*, t2.bar, t2.drink
from t1 left join 
     t2
     on t1.id = t2.id and t2.bar = 9
where t1.name = 'Frank';

left join确保第一个表中的所有行都在输出中。 where然后过滤这些行以获取所需的名称。关键是on子句,第二个表上有条件。如果匹配,您将在第二个表中获得匹配的行。否则,您将在NULL列中获得t2个值的行。