Выбрать все столбцы из таблицы, которые соответствуют идентификатору в другой таблице - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть такая структура таблицы

Заказчик

CustomerID|CustomerName|CustomerPhone|CustomerAddress
123       |Jason       |219632369    |4 pine street
485       |David       |219632369    |4 pine street
586       |Ramsay      |219632369    |4 pine street
779       |Jacob       |219632369    |4 pine street

Заказ

OrderID|CustomerID|ItemCode|ItemDesc
425    |123       |456     |Intel i7
427    |123       |456     |Intel i7
428    |485       |456     |Intel i7
429    |123       |456     |Intel i7
430    |485       |456     |Intel i7
431    |123       |456     |Intel i7

Ожидаемый результат

CustomerID|CustomerName|CustomerPhone|CustomerAddress
123       |Jason       |219632369    |4 pine street
485       |David       |219632369    |4 pine street

Я хочувыберите все столбцы из таблицы клиентов, у которых есть записи в таблице заказов, с использованием customerid

Это то, что я пробовал

select * 
from customer 
where customerid = (select customerid 
                      from order);

Но это не работает.

Ответы [ 4 ]

0 голосов
/ 20 декабря 2018

Попробуйте это

Вы можете создать псевдонимы для таблиц, это равносильно: выберите все из клиентов, где для заказов существует custommerid

Выберите A. * из клиента a, заказ b, гдеa.customerid = b.customerid

0 голосов
/ 20 декабря 2018

Используйте Exists для поиска таких клиентов, поскольку это позволяет избежать проблем в случае, если в каком-либо заказе не указан customerid.Если значение customerid равно null в order, предикат IN оценивается как неизвестный, и это означает, что клиент не возвращается.

select *
from customer c
where exists (
  select 1
  from "order" o
  where o.customerid = c.customerid 
)

Старайтесь избегать использования ключевых слов для имен таблиц (order), это может вызвать непредвиденные проблемы при написании кода SQL.

0 голосов
/ 20 декабря 2018

Вы можете сделать это, используя также внутреннее соединение, просто дополнительное решение:

select distinct cust.* from Customer cust inner join Order o on cust.CustomerID = o.CustomerID
0 голосов
/ 20 декабря 2018

Используйте оператор IN:

select * 
from customer
where customerid in (select customerid from order)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...