[英]where clause with composite primary key
例如,我在下表中的id, age
列上有一個復合主鍵:
ID | 年齡 | 名稱 |
---|---|---|
1個 | 23 | 約翰 |
2個 | 24 | 亞歷克斯 |
3個 | 22 | 搶 |
4個 | 20 | 埃拉 |
我能以某種方式在 where 子句中使用復合主鍵查詢表嗎,有點像這樣:
SELECT * FROM table
WHERE primary_key < (3, 22)
結果是這樣的:
ID | 年齡 | 名稱 |
---|---|---|
1個 | 23 | 約翰 |
2個 | 24 | 亞歷克斯 |
我不能像where id < 4 and age < 22
那樣查詢它,因為它會分別比較每一列。
您可以將元組與其他運算符進行比較,而不僅僅是=
或IN
所以
where (id, age) < (3, 22)
有效期為 SQL。
但我不得不承認,考慮到所選擇的列名,我發現這種情況非常混亂
出於好奇,這是你要找的嗎? 在這種情況下,它同時檢查 ID 和 AGE。 如果 ID < 3 為真且 Age > 22 在同一行上為真。 (必須在年齡上打開“>”,否則您將不會得到您在給出的示例中顯示的結果,因為它正在尋找 3 歲以下的 ID 和 22 歲以下的年齡。沒有在那里匹配,所以為了讓您的示例正常工作,我將其更改為查找 3 歲以下的 ID,而不是 22 歲以上的年齡。
小提琴: https://www.db-fiddle.com/f/iamNwXwdWhUJGvNnTC5dXG/0
CREATE TABLE test (
id INT,
age int,
name varchar(50)
);
INSERT INTO test (id, age, name)
VALUES
(1, 23, 'John'),
(2, 24, 'Alex'),
(3, 22, 'Rob'),
(4, 20, 'Ella');
SELECT * FROM test
WHERE ((id < 3) and (age > 22))
結果:
ID | 年齡 | 名稱 |
---|---|---|
1個 | 23 | 約翰 |
2個 | 24 | 亞歷克斯 |
某些 SQL 引擎可能支持這種類型的比較,但它在“標准 SQL”中不受支持
看起來你想要:
SELECT * FROM table
WHERE (id < 3) or (id = 3 and age < 22)
大多數 SQL 引擎應該可以很好地處理復合鍵,只要您對第一個鍵有約束以減少對第二個鍵的比較次數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.