我是 SQL 的初学者,如果这看起来微不足道/基本,我深表歉意。我正在努力解决它...
我正在尝试生成结果,以显示客户表中从未下过订单的所有客户,因此在发票表上没有条目。
换句话说,我想从客户表中选择发票表中没有客户编号条目的所有客户。
非常感谢,迈克
我是 SQL 的初学者,如果这看起来微不足道/基本,我深表歉意。我正在努力解决它...
我正在尝试生成结果,以显示客户表中从未下过订单的所有客户,因此在发票表上没有条目。
换句话说,我想从客户表中选择发票表中没有客户编号条目的所有客户。
非常感谢,迈克
SELECT *
FROM customer c
WHERE NOT EXISTS (
SELECT 1
FROM invoice i
WHERE i.customerid = c.customerid
)
我建议您也在这里阅读 Oracle 关于不同类型表连接的文档。
如果要返回所有客户行,则需要使用LEFT JOIN
select *
from customer c
left join invoices i
on c.customerid = i.customerid
where i.customerid is null
如果您在学习JOIN
语法方面需要帮助,那么这里有一个很好的 join 可视化解释。
即使表中没有匹配的行,ALEFT JOIN
也会返回表中的所有行。如果您只想返回在两个表中匹配的行,那么您将使用. 通过将 添加到查询中,它将仅返回那些在 中不匹配的行。customer
invoices
INNER JOIN
where i.customerid is null
invoices
如果 customer_id 是识别客户的列,你应该做这样的事情......
select * from Customer
where customer_id not in (select customer_id from invoice)