考慮下表:如何連接2個同表查詢結果在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
的目的是讓
- 只有一個重新線每個(
aaa
,bbb
)密鑰對 - 與
ccc
= 1青睞記錄,如果有超過1只記錄了(aaa
,bbb
)表
所以我想我需要連接結果密鑰對套2個的查詢:
SELECT * FROM `foo` WHERE `ccc` = 1
和
SELECT * FROM `foo` WHERE `ccc` = 0
當第一個查詢結果中已經有相同的密鑰對行(aaa
,bbb
)時,丟棄第二個查詢結果行。
如何在SQLite中進行編碼?
不SQLite的允許'IN'條款,如'CCC IN(0,1)'?如果是這樣,那麼你可以將你的查詢重寫爲'SELECT DISTINCT aaa,bbb FROM foo WHERE ccc IN(0,1)'。 – Vikdor
@Vikdor我不確定它是否支持這一點,會嘗試,但我需要完整的記錄,並且只有ccc = 1的記錄,如果ccc = 1和ccc = 0版本的同一記錄存在,我懷疑你的查詢是否(可能的確如此,在此之前我還沒有任何SQLite體驗)。 – Ivan
你可以通過加入一個對每個'aaa'和'bbb'具有最大值的子查詢來做到這一點。請參閱下面的答案。 –