【问题标题】:SQL how to get data from 2 tables with conditionSQL如何从有条件的2个表中获取数据
【发布时间】:2022-01-01 20:50:45
【问题描述】:

我需要获取 id3 = 100 的所有 id1

我试过了

SELECT id1 FROM "table 1" WHERE id2 = (SELECT id2 FROM "table 2" WHERE id3='100');

但 id2 的结果可能不止 1 个。所以我当然遇到了错误

我怎样才能得到这些数据??

【问题讨论】:

  • 使用IN 而不是=

标签: sql database tsql join select


【解决方案1】:

如果我没看错,这里应该可以使用简单的连接:

SELECT t1.id1
FROM Table1 t1
INNER JOIN Table2 t2
    ON t2.id2 = t1.id2
WHERE t2.id3 = 100;

【讨论】:

    【解决方案2】:
    SELECT id1 
    FROM "table 1" 
    WHERE id2 IN ( SELECT id2 
                   FROM "table 2" 
                   WHERE id3='100'
                  );
    

    【讨论】:

    • 在大型数据集上EXISTS 的执行速度将比IN
    • @ErgestBasha 100% 错误:它们在 SQL Server 中完全相同。 IN 查询在解析为相关半连接时会被转换,这与 EXISTS 完全相同。然后,优化器可以进一步将两者转换为普通连接、聚合连接或相关应用。无论哪种方式,都没有任何区别。自己试试看,没啥区别dbfiddle.uk/…
    • 完全同意查理的观点。实际上,@Charlieface,您知道这种(或相反的)迷信的起源吗?博学多才的 Aaron Bertrand 在这篇文章中说 2008 年以前是真的吗? stackoverflow.com/questions/2065329/…
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多