SQL:多个连接过滤器(2列)

时间:2015-07-17 11:30:20

标签: sql postgresql

我正在尝试过滤一个表格,以查找我在另一个黑名单中的特定订单ID'表。问题是,订单ID在一个国家/地区内只是不重要的,因此我需要在订单ID和国家/地区ID之间建立连接。例如。过滤掉订单ID 12345,但仅限于ID出现在美国,而不是墨西哥。黑名单'表包含此信息,但我不知道如何正确过滤数据表,因为在这种情况下,简单的AND语句是不够的。

谢谢!

丹尼尔

编辑:所以,我在底部添加了一个例子。

此预期输出应为

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 个答案:

答案 0 :(得分: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')

希望这有帮助。

答案 1 :(得分:0)

我认为你可以像这样使用EXISTS

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