MySQL-分组依据和不同,但返回所有行?

MySQL-分组依据和不同,但返回所有行?,mysql,Mysql,自学MySql的初学者。我需要返回父ID匹配的所有行,但年份不匹配。问题是,GROUPBY只为每个父id返回一行,我希望所有的都是这样,我已经使用了两个查询,并将结果从第一个粘贴到第二个,如何在一个查询中实现这一点 我有: id parent_id year aa1 aa 2010 aa3 aa 2011 bb1 bb 2010 bb2 bb 2011 cc1 cc 2010 cc2 cc

自学MySql的初学者。我需要返回父ID匹配的所有行,但年份不匹配。问题是,GROUPBY只为每个父id返回一行,我希望所有的都是这样,我已经使用了两个查询,并将结果从第一个粘贴到第二个,如何在一个查询中实现这一点

我有:

id  parent_id   year
aa1 aa          2010
aa3 aa          2011
bb1 bb          2010
bb2 bb          2011
cc1 cc          2010
cc2 cc          2010
我需要返回:

id  parent_id   year
aa1 aa          2010
aa3 aa          2011
bb1 bb          2010
bb2 bb          2011
当前第一个查询:

SELECT id, name, `year`, parent_id
FROM t1
GROUP BY parent_id
HAVING COUNT(DISTINCT `year`) > 1
然后,我使用以下命令将结果粘贴到一个简单的select查询中:

SELECT id, parent_id, name, `year`
FROM t1
WHERE parent_id IN ('......',')

一个选项可能是使用子查询。例如:

SELECT id, name, year, parent_id
FROM t1
WHERE parent_id IN (SELECT parent_id
FROM t1
GROUP BY parent_id
HAVING COUNT(DISTINCT year) > 1)
如果要多次查询,也可以使用视图。

JOIN比SELECT中的效率更高,假设父_id已被索引

或者您可能会发现GROUP_CONCAT更有趣:

SELECT  parent_id, GROUP_CONCAT(DISTINCT year) AS years
    FROM  t1;
    GROUP BY  parent_id
    HAVING  LENGTH(years) > 4; 
请尝试以下查询:

select a.id , a.parent_id , a.year
from t1 a join t1 b
on a.id <> b.id and a.parent_id=b.parent_id and a.year<>b.year;

仅当未启用“全组”模式时

SELECT id, parent_id, `year`
FROM test
GROUP BY parent_id, `year`
HAVING COUNT(*) = 1;

仅启用“全组”模式时

SELECT ANY_VALUE(id), parent_id, `year`
FROM test
GROUP BY parent_id, `year`
HAVING COUNT(*) = 1;
返回的结果是

+---------------+-----------+------+
| ANY_VALUE(id) | parent_id | year |
+---------------+-----------+------+
| aa1           | aa        | 2010 |
| aa3           | aa        | 2011 |
| bb1           | bb        | 2010 |
| bb2           | bb        | 2011 |
+---------------+-----------+------+

即使在5.7或更高版本中,也只能禁用_FULL_GROUP_BY,因此任何_值都是有用的;但它仍然违反了标准sql行为。删除了对MySQL 5.7的引用。
+---------------+-----------+------+
| ANY_VALUE(id) | parent_id | year |
+---------------+-----------+------+
| aa1           | aa        | 2010 |
| aa3           | aa        | 2011 |
| bb1           | bb        | 2010 |
| bb2           | bb        | 2011 |
+---------------+-----------+------+