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) キーペアごとに 1 つのレコードのみ
  • テーブルに( , ) キーペアのレコードが複数ある場合は、ccc= 1 のレコードを優先するaaabbb

したがって、2 つのクエリの結果セットを連結する必要があると思います。

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

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

aaa最初のクエリ結果に同じ ( , bbb) キーペア行が既にある場合、2 番目のクエリ結果行を破棄します。

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 に答える