【问题标题】:Multiple columns in subquery: SQLite, MS SQL Server [closed]子查询中的多列:SQLite,MS SQL Server [关闭]
【发布时间】:2020-12-28 15:33:23
【问题描述】:

如何在不使用 WHERE 部分中的多列选择的情况下重写此 SQL 查询 SQLFiddle

【问题讨论】:

  • 您的问题到底是什么? Sql server 不支持该语法,就像它不支持 SQLite 和/或 MySQL(或其他 dbms,就此而言)支持的许多其他语法一样。反之亦然。

标签: mysql sql sql-server edx


【解决方案1】:

语法(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

【讨论】:

  • 上述上下文中的“SELECT 1 ..”是什么意思?
  • 第一行匹配的那一刻,条件成立。 1 只是一个虚拟列值,您可以 select 'whateveryouwant' 并且它仍然可以工作。
猜你喜欢
  • 2023-03-29
  • 2021-08-15
  • 2019-06-28
  • 2012-10-26
  • 1970-01-01
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多