我有一个名为FILEINFO的表。每天会有一些文件名(大约100个)出现。我需要检查表中是否存在名称。在一个查询中
预先感谢
答案 0 :(得分:2)
我不知道这是否适合您的数据管道,但是这里一种干净的方法是将这些新传入的文件名写入某种表(临时表或永久表)中,然后使用简单的存在查询来检查它们是否已经存在于当前表中,例如
SELECT filename AS new_file
FROM temp_names t1
WHERE NOT EXISTS (SELECT 1 FROM FILEINFO t2 WHERE t2.filename = t1.filename);
如果您只想插入新文件名,则可以使用类似的逻辑,例如
INSERT INTO FILEINFO (filename)
SELECT filename
FROM temp_names t1
WHERE NOT EXISTS (SELECT 1 FROM FILEINFO t2 WHERE t2.filename = t1.filename);
答案 1 :(得分:1)
另一种方法是不使用临时表(Tim Biegeleisen回答)。
这种方法只会使用一个查询
SELECT
FILEINFO.filename
FROM (
SELECT 'filename1' AS filename FROM DUAL
UNION
SELECT 'filename2' AS filename FROM DUAL
) AS file_names
LEFT JOIN
FILEINFO
ON
file_names.filename = FILEINFO.filename
WHERE
FILEINFO.filename IS NULL
此查询也应在MySQL和Oracle数据库中均有效。
两个数据库系统都将DUAL
用作“虚拟”表以允许无表SELECT