【问题标题】:SQL: Select all records in table that exist in a select query where there is a composite keySQL:选择表中存在复合键的选择查询中的所有记录
【发布时间】:2013-11-20 20:58:20
【问题描述】:

我想从选择查询中也存在的表中选择所有记录。在这种情况下,表有一个复合键。我想要一些类似的东西

SELECT * FROM Table
WHERE 
(FOO, BAR) IN
SELECT...

(FOO, BAR) 是我的复合键,SELECT... 是一个选择查询。我应该如何更改上述内容才能使其正常工作?

【问题讨论】:

  • 我会说“SELECT * FROM Table WHERE (FOO, BAR) IN (SELECT what you want)”
  • 你已经使用了 EXISTS 这个词:select ... from a where exists (select * from b where b.x = ... AND ...);
  • @user2196728 SQLite 不支持元组比较。
  • 好吧抱歉,我没注意它与 SQLite 相关,抱歉...

标签: sql sqlite


【解决方案1】:

看来你要找的是EXISTS:

SELECT * 
FROM [Table] A
WHERE EXISTS (SELECT *
              FOR [SomeTable] B 
              WHERE A.FOO = B.FOO AND A.BAR = B.BAR)

【讨论】:

    【解决方案2】:

    试试这个查询:

    SELECT *
    FROM Table
    JOIN (SELECT...
    ) AS a 
    ON Table.FOO=a.FOO AND Table.BAR=a.BAR
    

    【讨论】:

    • 如果子表中的多条记录符合该条件,则连接将返回附加记录 - EXISTS 是这里更合适的解决方案。
    • 是的,我想我在这些情况下的反应只是GROUP BY Table.ID。我想在极少数情况下,这可能不存在和/或很明显。 (出于某种原因我反对EXISTS,我倾向于更喜欢(SELECT 1 ...)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多