Sql 退回没有销售的客户
我是SQL的初学者,如果这看起来很琐碎/基本,我深表歉意。我正努力让我的头绕过它 我试图生成的结果显示customer表中所有从未下过订单的客户,因此在invoice表中没有条目 换句话说,我想从客户表中选择所有客户,其中发票表中没有客户编号条目 非常感谢,,Sql 退回没有销售的客户,sql,sql-server,Sql,Sql Server,我是SQL的初学者,如果这看起来很琐碎/基本,我深表歉意。我正努力让我的头绕过它 我试图生成的结果显示customer表中所有从未下过订单的客户,因此在invoice表中没有条目 换句话说,我想从客户表中选择所有客户,其中发票表中没有客户编号条目 非常感谢,, Mike如果要返回所有客户行,则需要使用左联接 看 如果您需要学习连接语法的帮助,那么这里有一个很好的方法 左联接将返回customer表中的所有行,即使invoices表中没有匹配的行。如果只想返回两个表中匹配的行,那么可以使用内部联接
Mike如果要返回所有客户行,则需要使用左联接 看 如果您需要学习连接语法的帮助,那么这里有一个很好的方法
左联接将返回customer表中的所有行,即使invoices表中没有匹配的行。如果只想返回两个表中匹配的行,那么可以使用内部联接。通过将where i.customerid为null添加到查询中,它将仅返回发票中不匹配的行。如果客户id是标识客户的共谋,则您应该执行以下操作
select * from Customer
where customer_id not in (select customer_id from invoice)
我建议您也阅读Oracle关于不同类型的表联接的文档。我猜他只想要发票表中没有的客户。。。所以您应该检查where子句上的i.customerid是否为null。。。要过滤,请按左键join@FredericWHERE子句中的位置是正确的-请参阅此演示-我发表评论时WHERE子句不在那里。。我评论的时候你可能正在编辑。。或者我很困。。。无论如何,回答得很好,谢谢,这似乎达到了我想要的结果。请您解释一下为什么使用“选择1”-它是什么意思/作用?
select * from Customer
where customer_id not in (select customer_id from invoice)
SELECT *
FROM customer c
WHERE NOT EXISTS (
SELECT 1
FROM invoice i
WHERE i.customerid = c.customerid
)