为什么我在select语句中得到多于1行?

时间:2018-10-19 09:14:23

标签: sql oracle

我有一张桌子:

表:致富 列: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行吗?

2 个答案:

答案 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