当您使用EXISTS
指定的子查询本身内的约束。如果子查询为给定条件C.CUSTNUM = P.CNUM
返回至少一行,则认为条件满足。
我想这可以重写一个JOIN
到PRODUCTS
表。
SELECT C.CUSTNUM
FROM CUSTOMERS AS C
WHERE EXISTS (
SELECT 1
FROM PURCHASES AS P
JOIN PRODUCTS AS PR ON
ON P.PNUM = PR.PNUM -- not sure what column to join on in PRODUCTS
WHERE
C.CUSTNUM = P.CNUM -- added the correlation, I believe this is what you mean
PR.MSRP = 9.99
)
如果不是这种情况,只要坚持到您的修改后的查询:
SELECT C.CUSTNUM
FROM CUSTOMERS AS C
WHERE EXISTS (
SELECT 1
FROM PURCHASES AS P
WHERE
EXISTS (
SELECT 1
FROM PRODUCTS AS PR
WHERE PR.MSRP = 9.99
)
AND C.CUSTNUM = P.CNUM
但要注意的是,外部子查询将从PURCHASES
返回所有行,如果有至少一个排PRODUCTS
表无论任何列的匹配如何(您没有指定它们之间的任何相关条件)都有MSRP = 9.99
。
哪个RDBMS是这个呢?请添加一个标签来指定您是使用'mysql','postgresql','sql-server','oracle'还是'db2' - 或者其他的东西。 –