抱歉,主题标题不清楚。这是我的情况:
客户有一个包含135,000个JPG文件的图片库网站。每个文件在MySQL表中都有一个名为“照片”的行,其中包含诸如“标题”,“描述”,“关键字”,“文件名”等字段。
作为整理工作,我阅读了存储文件的服务器的内容,该文件带回了135,010个文件(即比我们知道的多10个文件)。我已经将这些文件的文件名存储在名为“ housekeeping”的新表和名为“ filename_housekeeping”的字段中。
所以我现在有2张桌子。其中一个包含135,000行,其中包含有关我们已知存在的文件的信息。但是,服务器分析显示有135,010个文件。因此,有10个文件是“孤立文件”,并且可能是过去删除失败的结果。
我想识别这10个文件,因此需要比较2个表/字段“ photos.filename” v“ housekeeping.filename_housekeeping”,并仅显示“ housekeeping”中10张在“ photos”中不存在的行。即我正在尝试识别服务器上我们不知道的10个文件的文件名。
希望这很清楚。我已经尝试了一些关于stackoverflow上类似问题的解决方案,但它们不太正确。
非常感谢你。
詹姆士。
最佳答案
这应该使您仅在一个表中存在但在另一个表中不存在的行,从而避免了代价高昂的联接或循环子查询:
SELECT sq.filename
FROM (SELECT filename
FROM photos
UNION ALL
SELECT filename_housekeeping AS filename
FROM housekeeping) AS sq
GROUP BY sq.filename
HAVING Count(*) = 1
在SQLFiddle上测试