从一个表中选择与另一个表中的ID匹配的所有列

时间:2018-12-20 19:47:40

标签: sql oracle

我有一个像这样的表结构

客户

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);

但这不起作用。

4 个答案:

答案 0 :(得分:2)

使用Exists来搜索此类客户,因为这样可以避免某些订单未指定customerid时出现问题。如果customerid中的某个nullorder,则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