Есть ли способ получить только те значения в предложении IN (или NOT IN), которые не соответствуют записи в таблице? - PullRequest
1 голос
/ 01 ноября 2011

Это может быть странный вопрос.В настоящее время у меня есть таблица с кучей данных.Используя PHP, я динамически создаю предложение IN.

SELECT * FROM table
WHERE field IN ('str1', 'str2', [...])

Допустим, нет записей, соответствующих 'str1' или 'str2', есть ли способ получить 'str1' и 'str2'?

Ответы [ 3 ]

1 голос
/ 01 ноября 2011
SELECT dmy.id
FROM (
   SELECT 'str1' as id
   UNION ALL
   SELECT 'str2' 
   UNION ALL
   .....
) dmy
LEFT JOIN some_table ON some_table.field = dmy.id
WHERE some_table.field IS NULL

По специальному запросу, вот объяснение:

Производная таблица (внутренняя выборка) просто создает «фиктивную» таблицу, которая содержит все требуемые значения. Тогда эта фиктивная таблица внешне присоединяется к реальной таблице. Все, что не имеет значения (NULL) во внешней объединенной таблице (some_table), не существует в списке значений из фиктивной "таблицы".

Чтобы увидеть эффект от производной таблицы, просто запустите ее без объединения:

SELECT dmy.id
FROM (
   SELECT 'str1' as id
   UNION ALL
   SELECT 'str2' 
   UNION ALL
   .....
) dmy
0 голосов
/ 01 ноября 2011

Или просто

SELECT field from table WHERE field IN ( .. ) GROUP BY field;

, это вернет 1 массив, содержащий в списке значений, которые имеют хотя бы одно совпадение.Тогда это легко выяснить, сравнив начальный список с полученным массивом, чтобы выяснить значения без совпадения

0 голосов
/ 01 ноября 2011

Поскольку вы создаете запрос динамически, ведите запись значений str в массиве. Затем, когда вы выполняете запрос и проверяете количество результатов, если результатов нет, вы можете делать все, что вам нужно, с массивом строк (полагаю, вы хотите где-нибудь это записать).

...