2016-11-10 3 views
1

Мне нужно проверить, содержит ли строка в таблице MySQL значение, хранящееся в другой таблице.MySQL Проверьте, содержит ли строка значение из другой таблицы

Это то, что я пытаюсь сейчас:

SELECT * FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE Column = '%'); 

Это все еще находит строки, которые действительно содержат значение во второй таблице. Я также попытался обменять EXISTS для LIKE и IN, которые возвращают синтаксические ошибки.

Edit:

Использование знака%, кажется, вызывает проблему. Вот несколько скриншотов о том, что происходит, когда я использую знак процента: enter image description here

Одно из значений, сохраненных во второй таблице, - «Meath», строка, содержащая «Meath», по-прежнему выбрана. Если добавить «Мит» вместо «%», то строка не возвращается: enter image description here

+0

Вам необходимо указать связь между двумя таблицами. –

+0

Каково имя столбца, который вы проверяете между таблицей 1 и таблицей2? – Sam07

+0

@Sam Столбец называется графством, извините, я просто поставил общие имена для примера – Edward144

ответ

1
SELECT * FROM table1 a 
WHERE a.County NOT IN(SELECT County FROM table2) 

Это должно соответствовать тому, что вы хотите.

Edit: если вам нужно только игнорировать определенные значения из table2, вы можете заменить вторую строку с этим

WHERE a.County NOT IN(SELECT County FROM table2 WHERE County IN('county1', 'county2')) 
+0

Это прекрасно работает, можете ли вы просто объяснить, что такое «a», это просто переменная, которая может быть любой ценностью? – Edward144

+0

Вам это действительно не нужно, это просто моя привычка. 'FROM table1 a' делает' a' своего рода псевдонимом (я не знаю правильного термина), который вы можете использовать в остальной части вашего запроса. Где вы видите «a.County», это то же самое, что сказать «table1.County». Это полезно в запросах, которые используют таблицы с одинаковыми именами столбцов. – Sam07

+0

Выключает это на самом деле _is_ называется псевдоним, ха-ха. Это может быть полезно, если мое объяснение не было: [link] (https://en.wikipedia.org/wiki/Alias_ (SQL)) – Sam07

0

Вам нужно определить какой-то связи между этими двумя запросами, например

SELECT * FROM table1 
WHERE NOT EXISTS (SELECT * 
        FROM table2 
        WHERE Column = '%' 
        AND table1.Column = table2.Column); --<-- Relate two queries 

Каждая строка, возвращаемая из запроса Outer будет проверяться на условие, которое вы определяете в предложении where внутреннего запроса, это относится к двум запросам, иначе у MySQL нет способа узнать, как проверить существование каждой строки, возвращаемой внешним запросом, и это будет не возвращай ничего.

+0

Это все еще возвращает строки, содержащие значения из второй таблицы. Однако только при использовании знака%, если я изменю его на определенное значение, которое имеет строка, то оно не появляется, никаких мыслей? – Edward144

+0

@ Edward144 Хорошо объясните, что вы подразумеваете под строками, которые существуют во второй таблице? Другими словами, как бы вы определили, существует ли строка во второй таблице или нет? –

+0

Я обновил сообщение со скриншотами, чтобы показать, что происходит. Я немного смутил себя, думаю, – Edward144

0
SELECT * FROM table1 
WHERE column NOT IN (SELECT column FROM table2 
       WHERE Column = '%'); 
Смежные вопросы