MySQL使用NOT IN查询表间差异数据时报#1064语法错误,求解决
哦,这个问题我碰到过,你的SQL语法问题很明确——NOT IN前面漏掉了要判断的字段FileId!
原语句里WHERE NOT IN (...)的写法不对,数据库根本不知道你要拿哪个字段去和子查询的结果对比。正确的写法应该明确指定FileId不在子查询返回的集合里:
SELECT FileId FROM PersonalDetail WHERE FileId NOT IN (SELECT FileId FROM FamilyDetail)
不过这里要提个小坑:如果FamilyDetail的FileId字段存在NULL值,NOT IN会返回空结果(因为SQL里任何值和NULL比较都是未知)。所以更稳妥的写法是用NOT EXISTS,它不受NULL的影响,性能也通常更好:
SELECT pd.FileId FROM PersonalDetail pd WHERE NOT EXISTS ( SELECT 1 FROM FamilyDetail fd WHERE fd.FileId = pd.FileId )
另外,用LEFT JOIN加IS NULL的写法也能实现同样的需求,逻辑上更直观一些:
SELECT pd.FileId FROM PersonalDetail pd LEFT JOIN FamilyDetail fd ON pd.FileId = fd.FileId WHERE fd.FileId IS NULL
这三种写法都能帮你拿到PersonalDetail中不存在于FamilyDetail的FileId,根据你的数据量和索引情况选合适的就行~
内容的提问来源于stack exchange,提问作者kobi
相关产品推荐
相关产品推荐

