Mysql 多个IN()运算符-无结果

Mysql 多个IN()运算符-无结果,mysql,sql,Mysql,Sql,我有一个问题: SELECT DISTINCT countryName,countrySlug FROM countries AS Country INNER JOIN countries_networks AS n ON Country.id = n.country_id AND n.network_id IN (1,14) 这很好用。但是,我现在需要添加一个'must have'子句,这样n.network_id也必须在集合6,7,8,9中。顺便说一句,它们可以有多个网络ID,因为我直接

我有一个问题:

SELECT DISTINCT
countryName,countrySlug
FROM countries AS Country 
INNER JOIN countries_networks AS n ON Country.id = n.country_id
AND n.network_id IN (1,14)
这很好用。但是,我现在需要添加一个'must have'子句,这样n.network_id也必须在集合6,7,8,9中。顺便说一句,它们可以有多个网络ID,因为我直接从查找表中提取

因此,我尝试在中添加另一个:

SELECT DISTINCT
    countryName,countrySlug
    FROM countries AS Country 
    INNER JOIN countries_networks AS n ON Country.id = n.country_id
    AND n.network_id IN (1,14)
AND n.network_id IN (6,7,8,9)
现在根本不会返回任何结果


看来我犯了个愚蠢的错误。有人能看到它是什么吗?

是的;您要求网络id出现在两个不相交的列表中。给定值a不可能同时出现在以下两个列表中:

1, 14
6, 7, 8, 9
要打败一匹死马,让我们看看每一个值

value  list1 list2
------------------
1      x
6            x
7            x
8            x
9            x
14     x
这是属于任一列表的全部值集;超出该范围的任何内容都不适合这两个条件,范围内的任何值都不适合这两个条件

要满足单个国家/地区可以基于国家/地区网络关联表具有多个网络ID的条件,可以执行以下操作:

select distinct
    c.countryname, c.countryslug

from country c

join country_network cn1 on cn1.country_id = c.country_id
join country_network cn2 on cn2.country_id = c.country_id

where cn1.network_id in (1, 14) and cn2.network_id in (6, 7, 8, 9)

对,;您要求网络id出现在两个不相交的列表中。给定值a不可能同时出现在以下两个列表中:

1, 14
6, 7, 8, 9
要打败一匹死马,让我们看看每一个值

value  list1 list2
------------------
1      x
6            x
7            x
8            x
9            x
14     x
这是属于任一列表的全部值集;超出该范围的任何内容都不适合这两个条件,范围内的任何值都不适合这两个条件

要满足单个国家/地区可以基于国家/地区网络关联表具有多个网络ID的条件,可以执行以下操作:

select distinct
    c.countryname, c.countryslug

from country c

join country_network cn1 on cn1.country_id = c.country_id
join country_network cn2 on cn2.country_id = c.country_id

where cn1.network_id in (1, 14) and cn2.network_id in (6, 7, 8, 9)

给定的网络id行不能同时在两个集中。1,14和6,7,8,9

您可以通过自联接实现所需的结果

... countries_networks cn1 
   join countries_networks cn2 on cn1.country_id = cn2.country_id
where cn1.network_id in (1,14) and cn2.network_id in (6,7,8,9)

给定的网络id行不能同时在两个集中。1,14和6,7,8,9

您可以通过自联接实现所需的结果

... countries_networks cn1 
   join countries_networks cn2 on cn1.country_id = cn2.country_id
where cn1.network_id in (1,14) and cn2.network_id in (6,7,8,9)

根据我上面的评论,请尝试以下操作:

SELECT DISTINCT countryName,countrySlug
FROM countries AS Country 
WHERE Country.id IN (SELECT n.country_id FROM countries_networks n WHERE n.network_id IN (1,14))
AND Country.id IN (SELECT n.country_id FROM countries_networks n WHERE n.network_id IN (6,7,8,9))
就性能而言,这两个子查询可能会产生影响,但这可能无关紧要,具体取决于表中的行数。我将尝试使用连接和更新

更新

使用双连接,这将产生所需的结果:

SELECT DISTINCT countryName,countrySlug
FROM countries AS Country
INNER JOIN countries_networks n1 ON n1.country_id = Country.id
INNER JOIN countries_networks n2 ON n2.country_id = Country.id
WHERE n1.network_id IN (1,14)
AND n2.network_id IN (6,7,8,9)

根据我上面的评论,请尝试以下操作:

SELECT DISTINCT countryName,countrySlug
FROM countries AS Country 
WHERE Country.id IN (SELECT n.country_id FROM countries_networks n WHERE n.network_id IN (1,14))
AND Country.id IN (SELECT n.country_id FROM countries_networks n WHERE n.network_id IN (6,7,8,9))
就性能而言,这两个子查询可能会产生影响,但这可能无关紧要,具体取决于表中的行数。我将尝试使用连接和更新

更新

使用双连接,这将产生所需的结果:

SELECT DISTINCT countryName,countrySlug
FROM countries AS Country
INNER JOIN countries_networks n1 ON n1.country_id = Country.id
INNER JOIN countries_networks n2 ON n2.country_id = Country.id
WHERE n1.network_id IN (1,14)
AND n2.network_id IN (6,7,8,9)
IN是一系列OR的同义词

那么a在1,2,4中的什么位置 也可以写成

WHERE (a = 1 OR a = 2 OR a = 4)  
您正在尝试执行以下操作:

WHERE ... a IN (1,14) AND a IN (6,7,8,9)
可以重写为

WHERE (a = 1 OR a = 14) AND (n.network_id = 6 OR ....)
不要介意在join子句中执行此操作,也不要介意我没有编写完整的等效代码。显然,network_id不能同时是两个不同的值,这就是为什么您的查询永远不会返回任何结果

IN是一系列OR的同义词

那么a在1,2,4中的什么位置 也可以写成

WHERE (a = 1 OR a = 2 OR a = 4)  
您正在尝试执行以下操作:

WHERE ... a IN (1,14) AND a IN (6,7,8,9)
可以重写为

WHERE (a = 1 OR a = 14) AND (n.network_id = 6 OR ....)

不要介意在join子句中执行此操作,也不要介意我没有编写完整的等效代码。显然,network_id不能同时是两个不同的值,这就是为什么您的查询永远不会返回任何结果

你构造的方式说网络id必须等于1或14,6或7或8或9,这是不可能的…你构造的方式说网络id必须等于1或14,6或7或8或9,这是不可能的。。。