SQL如何从有条件的2个表中获取数据

Posted

技术标签:

【中文标题】SQL如何从有条件的2个表中获取数据【英文标题】:SQL how to get data from 2 tables with condition 【发布时间】: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 而不是= 【参考方案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 年以前是真的吗? ***.com/questions/2065329/…

以上是关于SQL如何从有条件的2个表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

从 2 个表中获取数据到 excel 表中

如何通过匹配一些冗余字段从 3 个表中获取唯一数据?

如何根据搜索关键字 rails 从 2 个表中获取数据

如何使用外键从 2 个表中获取所有数据

QUERY DATABASE:如何从 2 个表中获取多个数据,其 id 不存在于表中

从 2 个表中获取数据