如何连接2个相同的表查询结果在SQLite中保留一个唯一的键?

时间:2012-10-01 13:53:19

标签: sql sqlite

考虑下表:

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

目标是获得

  • 每个(aaabbb)密钥对
  • 只有一条记录
  • 如果表格中有(cccaaa)密钥对的记录多于1条,则对bbb = 1的记录进行支持

所以我认为我需要连接2个查询的结果集:

SELECT * FROM `foo` WHERE `ccc` = 1

SELECT * FROM `foo` WHERE `ccc` = 0

在第一个查询结果中已存在相同(aaabbb)密钥对行时,丢弃第二个查询结果行。

如何在SQLite中编写代码?

1 个答案:

答案 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

SQLFiddle Demo