假设我有一个类似以下的sqlite表:
CREATE TABLE my_table (
id INTEGER PRIMARY KEY,
field1 INTEGER,
field2 INTEGER
);
INSERT INTO my_table (field1, field2) VALUES
(1, 2),
(2, 1),
(2, 1),
(3, 1),
(1, 2),
(2, 1);
看起来像:
1|1|2
2|2|1
3|2|1
4|3|1
5|1|2
6|2|1
对于组大小大于1的每组不同值,我想要一组相应的id。对于上述情况,这将是:1,5
和2,3,6
。
如果我跑
SELECT id FROM my_table
GROUP BY
field1, field2
HAVING count(*) > 1;
仅返回每个组的最后一个,即5
和6
。我可以为每个组返回所有 ID吗?
答案 0 :(得分:2)
如果没有聚合功能,您可以获得任何价值。 SQLite is similiar to MySQL in that matter。在标准SQL中,您必须选择聚合函数,否则您将收到错误。
要获取所有可以使用的值GROUP_CONCAT
:
SELECT field1, field2, GROUP_CONCAT(id, ',') AS ids
FROM my_table
GROUP BY field1, field2
HAVING COUNT(*) > 1;
的 SqlFiddleDemo
强>
输出:
╔═════════╦═════════╦═══════╗
║ field1 ║ field2 ║ ids ║
╠═════════╬═════════╬═══════╣
║ 1 ║ 2 ║ 1,5 ║
║ 2 ║ 1 ║ 2,3,6 ║
╚═════════╩═════════╩═══════╝
如果您希望ids
仅从选择列列表中删除field1,field2
。
SELECT GROUP_CONCAT(id, ',') AS ids
FROM my_table
GROUP BY field1, field2
HAVING COUNT(*) > 1
的 SqlFiddleDemo2
强>