带复合主键的 where 子句

where clause with composite primary key

例如,我在以下 table 中的列 id, age 上有一个复合主键:

id age name
1 23 John
2 24 Alex
3 22 Rob
4 20 Ella

我能以某种方式在 where 子句中使用复合主键查询 table 吗,就像那样:

SELECT * FROM table
WHERE primary_key < (3, 22)

结果是这样的:

id age name
1 23 John
2 24 Alex

我不能像where id < 4 and age < 22那样查询它,因为它会分别比较每一列。

出于好奇,这就是您要找的东西吗? 在这种情况下,它同时检查 ID 和 AGE。如果 ID < 3 为真且 Age > 22 在同一行上为真。 (必须在年龄上打开“>”,否则您将不会得到您在给出的示例中显示的结果,因为它正在寻找 3 岁以下的 ID 和 22 岁以下的年龄。没有在那里匹配,所以为了让您的示例正常工作,我将其更改为查找 3 岁以下的 ID,而不是 22 岁以上的年龄。

Fiddle: 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 age name
1 23 John
2 24 Alex

某些 SQL 引擎可能支持这种类型的比较,但在“标准 SQL”

中不受支持

看来你想要:

SELECT * FROM table
WHERE (id < 3) or (id = 3 and age < 22)

大多数 SQL 引擎应该可以很好地处理复合键,只要您对第一个键有约束以减少对第二个键的比较次数。

您可以将元组与其他运算符进行比较,而不仅仅是 =IN

所以

where (id, age)  < (3, 22)

有效SQL.

但我不得不承认,鉴于所选的列名,我发现该条件非常混乱