sql - 如何连接2个同表查询结果并在SQLite中保持唯一键?

标签 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 ) key 对只有一条记录
  • 如果表中( ccc , aaa ) key 对有超过 1 条记录,则优先选择 bbb = 1 的记录

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

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

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

当第一个查询结果中已经存在相同的( aaabbb ) 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/

相关文章:

mysql - 单个查询中的多个 MySQL 计数

sql - 如何将这 2 个查询合并为 1?

c# - SqlDataAdapter 是否打开自己的连接?

sql - 如何连接两个表,其中某些行部分留空?

iphone - 非常大的 sqlite 数据库副本

c# - 查询表只返回null返回sqlite-net-pcl中的列表

php - 如何从表中的自动增量获取值并将其用于另一个表?

sql - 同步数据库

c# - 难以在 C# 中的 SQLite 数据库上运行并发 INSERTS

python - 如何在 Python 中使用变量更新 sqlite 条目