[英]Mysql SELECT IN GROUP_CONCAT
I want to use IN a subquery in mysql but I need GROUP_CONCAT
to have a having
(my sub query work well). 我想在MySQL的子查询中使用,但我需要
GROUP_CONCAT
有having
(我的子查询的工作很好)。
SELECT pd.* FROM Product pd
WHERE perimeter_id IN (SELECT GROUP_CONCAT(p.id)
FROM Perimeter p
GROUP BY p.network_id, p.productRange_id, p.country_id
HAVING count(id) > 1);
You don't have to use GROUP_CONCAT. 您不必使用GROUP_CONCAT。 This query will return all (network_id, productRange_id, country_id) that have multiple IDs:
此查询将返回具有多个ID的所有(network_id,productRange_id,country_id):
SELECT p.network_id, p.productRange_id, p.country_id, GROUP_CONCAT(p.id)
FROM Perimeter p
GROUP BY p.network_id, p.productRange_id, p.country_id
HAVING count(id) > 1
This query will return all IDs in different rows: 该查询将返回不同行中的所有ID:
SELECT p.ID
FROM
Perimeter p INNER JOIN (
SELECT p.network_id, p.productRange_id, p.country_id, GROUP_CONCAT(p.id)
FROM Perimeter p
GROUP BY p.network_id, p.productRange_id, p.country_id
HAVING count(id) > 1
) d ON (p.network_id, p.productRange_id, p.country_id) = (d.network_id, d.productRange_id, d.country_id)
and this is your final query: 这是您的最终查询:
SELECT pd.*
FROM Product pd
WHERE
perimeter_id IN (
SELECT p.ID
FROM
Perimeter p INNER JOIN (
SELECT p.network_id, p.productRange_id, p.country_id, GROUP_CONCAT(p.id)
FROM Perimeter p
GROUP BY p.network_id, p.productRange_id, p.country_id
HAVING count(id) > 1
) d ON (p.network_id, p.productRange_id, p.country_id) =
(d.network_id, d.productRange_id, d.country_id)
)
I think you can do a INNER JOIN
like 我想你可以做一个
INNER JOIN
SELECT pd.*
FROM Product pd
INNER JOIN Perimeter p ON pd.perimeter_id = p.id
GROUP BY p.network_id, p.productRange_id, p.country_id
HAVING count(DISTINCT p.id) > 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.