我有一张桌子:
表:致富 列:ID,Bericht,Bericht,Klant_ID,Product_ID,Datum
我有一行,并且想用与列中相同的klant_id向用户显示,当我运行以下语句时,我得到10行
select
b.ID,
b.Product_id ,
b.Klant_id,
b.onderwerp
from BERICHTEN b, KLANTEN k
WHERE b.klant_id = (select ID from klanten where email = 'joris@am.nl')
有人知道为什么我得到10行而不是1行吗?
答案 0 :(得分:6)
您正在做CROSS JOIN
,而只做JOIN
:
select b.ID, b.Product_id, b.Klant_id, b.onderwerp
from BERICHTEN b inner join
KLANTEN k
on b.klant_id = k.id
where k.email = 'joris@am.nl';
但是,使用exists
可能更容易理解:
select b.ID, b.Product_id, b.Klant_id, b.onderwerp
from BERICHTEN b
where exists (select 1 from KLANTEN k where k.id = b.klant_id and k.email = 'joris@am.nl');
答案 1 :(得分:1)
您的查询在两个表之间进行交叉联接
select
b.ID,
b.Product_id ,
b.Klant_id,
b.onderwerp
from BERICHTEN b, KLANTEN k -- coma separated table make cross join
WHERE b.klant_id = (select ID from klanten where email = 'joris@am.nl')
因此,您需要像下面这样明确地加入
select b.ID, b.Product_id, b.Klant_id, b.onderwerp
from BERICHTEN b join
KLANTEN k
on b.klant_id = k.id
where k.email = 'joris@am.nl' -- put your condition here