带复合主键的 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.
但我不得不承认,鉴于所选的列名,我发现该条件非常混乱
例如,我在以下 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.
但我不得不承认,鉴于所选的列名,我发现该条件非常混乱