当我使用子查询或JOIN时,我得到不同的结果。
查询是:
SELECT
COUNT(*)
FROM
table2
WHERE
table2.id NOT IN (
SELECT fkfield FROM table1
)
和
SELECT
COUNT(*)
FROM
table2
LEFT JOIN table1 ON table1.fkfield = table2.id
WHERE
table1.id IS NULL
(table1.fkfield
对table2.id
)有一个FK约束
第一个查询返回0行,第二个查询返回396行。
我已尝试OPTIMIZE TABLE
并导出/导入(使用mysqldump)但没有运气。
引擎 Innodb 。
提前致谢。
答案 0 :(得分:0)
左连接并不完全符合您的预期
“LEFT JOIN关键字返回左表(table1)中的所有记录,以及右表(table2)中的匹配记录。如果没有匹配,则结果从右侧为NULL” https://www.w3schools.com/sql/sql_join_left.asp
LEFT JOIN table1 ON table1.fkfield = table2.id
它返回交集和所有table2.id值
所以
SELECT
COUNT(*)
FROM
table2
WHERE
table2.id NOT IN (
SELECT fkfield FROM table1
)
仅返回table1和table2的交集
虽然
SELECT
COUNT(*)
FROM
table2
LEFT JOIN table1 ON table1.fkfield = table2.id
WHERE
table1.id IS NULL
返回table1和table2的交集以及table2.id
的所有值答案 1 :(得分:0)
我想这意味着你的第二个查询中有一些匹配,其中table1_id为null。尝试通过addng sum检查(table1_id为null,然后为1,否则为0结束时),选择