过滤与另一个表匹配的查询

Posted

技术标签:

【中文标题】过滤与另一个表匹配的查询【英文标题】:Filter query on matching with another table 【发布时间】:2017-08-28 12:57:46 【问题描述】:

我有一张表,其中有订阅者,他们有两个字段:国家和语言。 另一个表只有两列,国家和语言。 我需要过滤订阅者,排除那些国家和语言的组合与映射表中的组合匹配的订阅者。

我有

SELECT * from Subscribers 
LEFT JOIN Mapping on Mapping.Country != Subscribers.Country 
AND Mapping.Language != Subscribers.Language

但是,它似乎根本没有过滤。 LEFT JOIN 是正确的方向吗?

【问题讨论】:

在你修复你的数据模型之前,你不应该向任何方向“走”...为什么冗余,为什么订阅者有国家和语言——而不仅仅是 id i> 第二个表中对应的记录...? 【参考方案1】:

使用内连接:-

SELECT * from Subscribers 
inner join Mapping on Mapping.Country != Subscribers.Country 
AND Mapping.Language != Subscribers.Language

【讨论】:

【参考方案2】:

我会尝试不同的方法,像这样:

SELECT * from Subscribers 
LEFT JOIN Mapping on Mapping.Country = Subscribers.Country 
AND Mapping.Language = Subscribers.Language    
WHERE Mapping.Country IS NULL 

我正在做的是加入我们不想要的匹配表,并使用“Where”子句排除那些不需要的匹配。

希望这样的事情有所帮助!

【讨论】:

以上是关于过滤与另一个表匹配的查询的主要内容,如果未能解决你的问题,请参考以下文章

多对多关系过滤器

如果一个列值仅与另一列中的一个值相关联,则过滤掉行

SQL Server 查询使用 BETWEEN 过滤器带来不匹配的数据

标准 sql 查询以获取与另一个表匹配的记录字段(Google BigQuery)

SqlAlchemy:过滤以匹配所有而不是列表中的任何值?

elasticsearch 查询与过滤