【问题标题】:SQL: use ID's in temp table to query another tableSQL:使用临时表中的 ID 查询另一个表
【发布时间】:2016-10-25 08:13:42
【问题描述】:

我有一个将数据加载到临时表中的查询

SELECT * INTO #tempTable FROM Players where [reference month] = '2016-08-01' 

我现在需要使用这些 ID 在上个月找到它们

SELECT ID FROM Players WHERE [reference month] = '2016-07-01' AND EXISTS 
(SELECT #tempTable.ID FROM #tempTable)

我已经测试了#tempTable (SELECT * FROM #tempTable),它返回了 346 条记录,这是正确的。

上面的代码正在搜索 Players 表中的每条记录 (1000+),而不是在 #tempTable 中找到的特定 ID

如何修复此查询以仅使用在#tempTable 中找到的 ID?

【问题讨论】:

  • INNER JOIN 或使用 IN 而不是 EXISTS

标签: sql-server temp-tables


【解决方案1】:

您可以尝试以下任一选项,

SELECT ID
FROM Players
WHERE [reference month] = '2016-07-01'
    AND EXISTS (
        SELECT T.ID
        FROM #tempTable T
        WHERE T.ID = Players.ID
    )

SELECT P.ID
FROM Players P
INNER JOIN #tempTable T
    ON  T.ID = Players.ID
WHERE P.[reference month] = '2016-07-01'

【讨论】:

  • 我选择了第一个选项 - 它有效 - 谢谢
【解决方案2】:

试试这个

SELECT ID
FROM Players
WHERE [reference month] = '2016-07-01'
    AND ID IN (
        SELECT #tempTable.ID
        FROM #tempTable
    );

【讨论】:

    【解决方案3】:

    你快接近了。只是在EXISTS 中缺少WHERE 子句

    SELECT ID FROM Players WHERE [reference month] = '2016-07-01' AND EXISTS 
    (SELECT T.ID FROM #tempTable T WHERE T.ID = Players.ID)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多