Почему я получаю более 1 строки в операторе выбора? - PullRequest
0 голосов
/ 19 октября 2018

У меня есть таблица:

Таблица: Berichten Столбцы: 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 голосов
/ 19 октября 2018

ваш запрос создает перекрестное соединение между двумя таблицами

  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
0 голосов
/ 19 октября 2018

Вы делаете 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...