考虑以下 Table_A 和 Table_B:
Table_A
ID |A_Field_1
1 |10
2 |11
3 |12
表_B:
ID |B_Field_1
1 |500
1 |510
1 |520
2 |550
3 |530
我需要编写一个查询,以获取 Table_B
中没有 的值的
值为 520 或 530。ID
和 A_Field_1
B_Field_1
输出:
ID |A_FIELD_1
2 |11
我当前的查询如下:
SELECT ID,A_Field_1
from Table_A
where ID not in (select ID from Table_B where B_Field_1 in (520,530))
这可行,但有人可以提供更好的基于性能的查询吗?如上面的查询所示,select ID from Table_B where B_Field_1 in (520,530)
内部查询很大并且对应于不断增长的表。
最佳答案
你也可以这样尝试
SELECT
Id
, A_Field_1
FROM TABLE_A A
INNER JOIN
(
SELECT
Id
, COUNT(CASE WHEN B_Field_1 IN (520, 530) THEN 1 END) AS ValidId
FROM Table_B
GROUP BY Id
) b ON A.Id = b.Id AND b.ValidId < 1
关于sql - 选择查询所需的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17397972/