子查询中的多个列:SQLite,MS SQL Server

问题描述

如何在不使用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
        )


SQL Fiddle in SQL Server

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...