简体   繁体   English

Mysql SELECT IN GROUP_CONCAT

[英]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_CONCAThaving (我的子查询的工作很好)。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM