2

考虑下表:

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记录超过 1 条,则使用= 1 的记录aaabbb

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

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

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

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

如何在 SQLite 中编写代码?

4

1 回答 1

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 演示

于 2012-10-01T13:55:49.050 回答