考虑下表:
CREATE TABLE `foo`(
`aaa` VARCHAR(45) NOT NULL,
`bbb` VARCHAR(45) NOT NULL,
`ccc` INT NOT NULL,
`ddd` INT NOT NULL,
PRIMARY KEY(`aaa`, `bbb`, `ccc`)
);
以下数据:
INSERT INTO `foo` (`aaa`, `bbb`, `ccc`, `ddd`)
VALUES
('qwe', 'rty', 0, 123),
('asd', 'fgh', 0, 456),
('asd', 'fgh', 1, 678);
得到以下结果:
'qwe', 'rty', 0, 123
'asd', 'fgh', 1, 678
目标是获得
- 每个(
aaa
、bbb
) key 对只有一条记录 - 如果表中(
ccc
,aaa
) key 对有超过 1 条记录,则优先选择bbb
= 1 的记录
所以我认为我需要连接 2 个查询的结果集:
SELECT * FROM `foo` WHERE `ccc` = 1
和
SELECT * FROM `foo` WHERE `ccc` = 0
当第一个查询结果中已经存在相同的( aaa
、 bbb
) key 对行时,丢弃第二个查询结果行。
如何在 SQLite 中编码?
最佳答案
试试这个,
SELECT a.*
FROM foo a
INNER JOIN
(
SELECT aaa, bbb, MAX(ccc) maxC
FROM foo
GROUP BY aaa, bbb
) b ON a.aaa = b.aaa AND
a.ccc = b.maxC AND
a.bbb = b.bbb
SQLFiddle Demo
关于sql - 如何连接2个同表查询结果并在SQLite中保持唯一键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12674658/