gpt4 book ai didi

sql - 根据唯一对列表从数据库中选择

转载 作者:行者123 更新时间:2023-11-29 11:24:02 28 4
gpt4 key购买 nike

例如,如果我得到下表

Id        Key             Value

1 A Alpha
2 B Alpha
3 A Charlie

然后我接受输入 {(A, Charlie) 和 (B, Alpha)} 并要求返回所有我希望它返回 2 和 3 但不是 1 的 ID。

最好的方法是什么?我可以将它们全部合并到一个查询中吗(为了速度),或者我是否必须对收到的每个值对运行重复查询。

最佳答案

我认为 Postgresql 有最优雅的解决方案:

SELECT  *
FROM T
WHERE ("Key", "Value") IN (('B', 'Alpha'), ('A', 'Charlie'));

SQL Fiddle Example

在 SQL-SERVER 2008 及以后的版本中,您可以使用 VALUES 来构建您的元组:

SELECT  T.*
FROM T
INNER JOIN
( VALUES
('B', 'Alpha'),
('A', 'Charlie')
) v (Key, Value)
ON v.Key = T.Key
AND v.Value = T.Value

SQL Fiddle Example

或者对于一个过程,您可以创建一个键值对类型并将其作为参数传递:

CREATE TYPE KeyValuePair AS TABLE ([Key] VARCHAR(1), [Value] VARCHAR(7));

DECLARE @T AS KeyValuePair
INSERT @T
VALUES
('B', 'Alpha'),
('A', 'Charlie')


SELECT T.*
FROM T
INNER JOIN @T v
ON v.[Key] = T.[Key]
AND v.Value = T.Value;

SQL Fiddle Example

对于 MySQL,我认为您可能只需要使用 AND/OR

来构建它
SELECT  *
FROM T
WHERE (`Key` = 'A' AND `Value` = 'Charlie')
OR (`Key` = 'B' AND `Value` = 'Alpha')

Example on SQL Fiddle

我对其他 DBMS 的了解有限,所以如果不是上述情况,我无法提供更多帮助。

编辑(在 a_horse_with_no_name 的帮助下)

PostgreSQL 语法也适用于 Oracle (我认为是 DB2)

关于sql - 根据唯一对列表从数据库中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13477775/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com