sqlite-如何从一个表中选择不在另一个表中的记录

qyyhg6bp  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(304)

我有一个有3个表的数据库;tbl客户,tbl图书,tbl灯光。
我想从customers表中查找客户的姓氏(lname),其中客户没有出现在bookings表中。它应该只返回三个名称,但每个名称返回10次。bookings表中有10条记录,因此我认为命令返回的是正确的名称,但不是一次。。。
我试过:

SELECT tblCustomers.LName
FROM tblCustomers, tblBookings
WHERE tblCustomers.CustID 
NOT IN (SELECT CustID FROM tblBookings)

如何只返回名称的一个示例,而不是名称重复10次?

kzipqqlq

kzipqqlq1#

您正在对这两个表进行交叉联接。
仅在以下情况下使用:

SELECT LName 
FROM tblCustomers 
WHERE CustID NOT IN (SELECT CustID FROM tblBookings)
eblbsuwk

eblbsuwk2#

(隐式) cross join 在outer查询的bookings表上进行查询是没有意义的,它将乘以customer行。
另外,我建议 not exists 用于过滤而不是 not in :它通常表现得更好-有了正确的索引,它是 null -安全:

SELECT c.LName 
FROM tblCustomers c
WHERE NOT EXISTS (SELECT 1 FROM tblBookings b WHERE b.CustID = c.CustID)

为了提高性能,请确保在 tblBookings(CustID) -如果您声明了正确的外键,它应该已经存在了。

相关问题