这是我遇到的问题的抽象。我有两张桌子:
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进行此查询。
答案 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
个值的行。