2015-07-17 2 views
-1

Я пытаюсь отфильтровать таблицу для идентификаторов заказа, которые у меня есть в другой таблице «черный список». Проблема заключается в том, что идентификаторы заказов являются только неопределенными внутри страны, поэтому мне нужно будет установить связь между идентификатором заказа и идентификатором страны. Например. Отфильтруйте идентификатор заказа 12345, но только если идентификатор встречается в США, но не в Мексике. В таблицу «черный список» включена эта информация, но я не знаю, как я могу соответствующим образом фильтровать таблицу данных, так как простой оператор AND в этом случае недостаточен.SQL: множественный, подключенный фильтр (2 столбца)

Спасибо!

Daniel

редактировать: Так, я добавил пример в нижней части.

Ожидаемый выход из этого должно быть то

100 10000001 
200 10000001 
300 10000001 xx filtered out 
100 10000002 xx filtered out 
200 10000002 xx filtered out 
300 10000002 
100 10000003 
200 10000003 
300 10000003 
100 10000004 xx filtered out 
200 10000004 
300 10000004 xx filtered out 

Обе предлагаемые решения помогли решить эту проблему - большое спасибо!

Решение 1 http://sqlfiddle.com/#!15/b0ab6/3 Решение 2 http://sqlfiddle.com/#!15/b0ab6/4

+2

Просьба определения таблицы, некоторые выборочные данные и ожидаемый результат, основываясь на этих данных. ** отредактируйте ** свой вопрос и правильно отформатируйте информацию. –

+1

Как добавить вашу схему в [SQL Fiddle] (http://sqlfiddle.com/#!15), чтобы мы могли видеть таблицы и немного поиграть с ними? Просто схема и, может быть, несколько строк данных были бы хороши. :) – citywall

+0

Конечно, дай мне минуту! – Daniel

ответ

0

Я не уверен, если я полностью получить вас, но в MySQL вы можете фильтровать по парам, например

order_id country total_price 
4523 ES  6 
4524 ES  9 
4525 FR  7 

Вы можете запросить затем по порядку и стране, как это:

SELECT * FROM order 
WHERE (order_id, country) 
    IN (SELECT id, country FROM blacklist WHERE country = 'ES') 

Надеется, что это помогает.

+0

Большое спасибо, это работает и выглядит как простейшее решение - я не знал, что это действительно возможно. Извинения, если бы это было очевидно, я только недавно начал с SQL. – Daniel

0

Я думаю, что вы можете использовать EXISTS так:

SELECT * 
FROM orders o 
WHERE NOT EXISTS ( 
    SELECT 1 
    FROM blacklist b 
    WHERE o.country = b.country 
     AND o.ID = b.ID) 
+0

Большое спасибо, это работает! Я в конечном итоге пошел с решением токенизатора, поскольку он дает мне тот же результат и короче. Любые преимущества перед использованием «EXISTS», а не «ГДЕ»? – Daniel

+0

Я использую 'Exists' после' WHERE' вместо использования 'IN' ;;). –

Смежные вопросы