问题描述
如何在不使用WHERE部分中的多列选择的情况下重写此SQL查询SQLFiddle。
解决方法
语法(hs1.ID,hs2.ID,hs3.ID) IN ...
SQL Server不支持。
IN
语句的左侧只能有1列或变量。
您可以使用EXISTS重写它:
SELECT hs1.name,hs1.grade,hs2.name,hs2.grade,hs3.name,hs3.grade
FROM highschooler AS hs1,highschooler AS hs2,highschooler AS hs3
WHERE EXISTS (
SELECT 1
FROM friend AS fr1
JOIN (
SELECT ls.ID1,ls.ID2
FROM likes AS ls
WHERE NOT EXISTS (
SELECT f.ID1,f.ID2
FROM friend AS f
WHERE f.ID1 = ls.ID1
AND f.ID2 = ls.ID2
)
) AS X ON fr1.ID1 = X.ID1
JOIN friend AS fr2 ON X.ID2 = fr2.ID1
WHERE fr1.ID2 = fr2.ID2
AND hs1.ID = X.ID1
AND hs2.ID = X.ID2
AND hs3.ID = fr1.ID2
)