Как я могу показать данные не в таблице без сравнения с другими таблицами в SQL - PullRequest
0 голосов
/ 04 марта 2019

У меня есть одна таблица с именем FILEINFO.Ежедневно будут приходить некоторые имена файлов (около 100).Мне нужно проверить, присутствуют ли имена в таблице или нет.в одном запросе

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Другой подход был бы без использования временной таблицы (ответ Тима Бигелайзена).Этот подход будет использовать только один запрос

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 в качестве «фиктивной» таблицы, чтобы разрешить SELECTS

без таблиц
0 голосов
/ 04 марта 2019

Я не знаю, вписывается ли это в ваш конвейер данных, но один из подходов здесь состоит в том, чтобы записать эти новые имена входящих файлов в какую-то таблицу (временную или постоянную), а затем использовать простой существующий запрос дляпроверьте, присутствуют ли они в вашей текущей таблице, например,

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);
...