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个表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章