我们能否将子查询的结果连接到一个表中,例如:
select name from gifts
LEFT OUTER JOIN (select giftID from gifts) ...
如果不行,是否可以通过一些方法来实现,比如创建临时表?
附注子查询只能使用 IN 或 NOT IN、EXISTS 或 NOT EXISTS 出现吗?
是的,sql 适用于集合;子查询返回一个集合作为结果,所以这是可能的。
您必须为子查询命名:
(SELECT * FROM table) AS sub
或 (SELECT * FROM table) sub
。作为完整查询:
SELECT name FROM gifts
LEFT OUTER JOIN (SELECT giftID FROM gifts) AS sub
ON ...
WHERE ...
是的,您可以使用选择作为 INNER JOIN,您只需给它一个别名:
SELECT Name FROM Transactions T
INNER JOIN (SELECT Distinct customerID As CustomerID FROM Customers) A
ON A.CustomerID = T.CustomerID
另一种方法,可能是创建子查询的视图。然后像平常一样进行 JOIN(通过引用 VIEW)。
SELECT CustomerId,
Name,
Address
FROM Table1 M
INNER JOIN Table2 C ON M.CustomerId=C.CustomerId
WHERE CustomerId IN
(SELECT CustomerId
FROM Table1 M
INNER JOIN Table2 ON M.CustomeID=C.CustomerId)
ORDER BY CustomerId,
Name,
Address