簡體   English   中英

帶復合主鍵的 where 子句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM