gpt4 book ai didi

mysql - 为什么 INNER JOIN 不等于 (!=) 永远挂起

转载 作者:IT老高 更新时间:2023-10-29 00:13:24 37 4
gpt4 key购买 nike

当我执行以下查询时:

SELECT * FROM `table1` 
INNER JOIN table2 ON table2.number = table1.number

我在 2 秒内得到结果。 table2 大约有 600 万条记录,table1

大约有 100 万条记录

table2.numbertable1.number 已编入索引。

现在我想获取一个不存在的数字列表。像这样:

SELECT * FROM `table1` 
INNER JOIN table2 ON table2.number != table1.number

它需要永远并且仍然挂起..如何解决?

最佳答案

假设您的第一个 INNER JOIN 返回 table1 中 1,000,000 行的 75%。第二个查询并没有像您想象的那样返回其他 250,000 行。相反,它会尝试创建笛卡尔积并删除 750,000 个匹配行。因此它试图返回 6,000,000×1,000,000-750,000 行。这是一个膨胀的 6×1012 行结果集。

你可能想要这个:

SELECT * FROM table1
LEFT JOIN table2 ON table2.number = table1.number
WHERE table2.number IS NULL

这将返回 table1 中不存在于 table2 中的行。

您可能还对 FULL OUTER JOIN 感兴趣:

SELECT * FROM table1
FULL OUTER JOIN table2 ON table2.number = table1.number
WHERE table1.number IS NULL AND table2.number IS NULL

这将返回两个表中的行,这些行在另一个表中没有匹配项。

关于mysql - 为什么 INNER JOIN 不等于 (!=) 永远挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13863751/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com