考虑下表:
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
)密钥对ccc
,aaa
)密钥对的记录多于1条,则对bbb
= 1的记录进行支持所以我认为我需要连接2个查询的结果集:
SELECT * FROM `foo` WHERE `ccc` = 1
和
SELECT * FROM `foo` WHERE `ccc` = 0
在第一个查询结果中已存在相同(aaa
,bbb
)密钥对行时,丢弃第二个查询结果行。
如何在SQLite中编写代码?
答案 0 :(得分:2)
试试这个,
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