我有一个像这样的表结构
客户
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
我想使用客户ID从客户表中选择在订单表中具有条目的所有列
这是我尝试过的
select *
from customer
where customerid = (select customerid
from order);
但这不起作用。
答案 0 :(得分:2)
使用Exists
来搜索此类客户,因为这样可以避免某些订单未指定customerid
时出现问题。如果customerid
中的某个null
是order
,则IN
谓词被评估为未知,这意味着没有客户返回。
select *
from customer c
where exists (
select 1
from "order" o
where o.customerid = c.customerid
)
尝试避免在表名(order
)中使用关键字,否则在编写SQL代码时可能会导致意外的麻烦。
答案 1 :(得分:1)
您也可以使用内部联接来完成此操作,这只是一个附加解决方案:
select distinct cust.* from Customer cust inner join Order o on cust.CustomerID = o.CustomerID
答案 2 :(得分:0)
使用IN
运算符:
select *
from customer
where customerid in (select customerid from order)
答案 3 :(得分:0)
尝试一下
您可以为表创建别名,这等同于:从订单中存在customerid的客户中全选
选择A. * 从客户a订购b 其中a.customerid = b.customerid