-4

需要明确的是,这是场景:我正在执行如下查询:

SELECT * FROM table_name WHERE uid IN ( 1, 3, 5, 8, 23, 4, 589 ... )

s列表uid来自用户。

有没有办法uid使用 SQL 获取列表中所有匹配的 s?

我正在寻找 Oracle SQL 语法,但我也想知道常见数据库系统的语法。

谢谢。

更新

我想得到ALL MATCHING uid。例如,表中没有具有 uid823的记录,输出应为 1, 3, 5, 4, 589 ...

4

2 回答 2

1

有没有办法使用 SQL 获取列表中所有匹配的 uid?

是的,使用您的查询,但只需获取该uid列。如果您不想重复,请使用DISTINCT关键字:

SELECT DISTINCT uid
FROM   table_name
WHERE  uid IN ( 1, 3, 5, 8, 23, 4, 589 ... )

如果您希望它在逗号分隔的列表中:

SELECT LISTAGG( uid, ',' ) WITHIN GROUP ( ORDER BY uid ) AS uids
FROM   table_name
WHERE  uid IN ( 1, 3, 5, 8, 23, 4, 589 ... )
于 2017-05-02T08:40:18.113 回答
0

我注意到我正确理解了你的问题。如果你想知道,给定一个值列表,表中的值是什么,哪些不是,你可以试试这个;您需要回答您在临时表中查找的值(或选择联合子句或类似的东西),然后对您的表进行左连接(这里是您的表)。此脚本是为 MSSQL 提供的。如果这个解决方案是您所要求的(从您的问题中不清楚),那么将它们转换为 Oracle 应该很容易。

CREATE TABLE TX (UID INT)
INSERT INTO TX VALUES (1),(5),(4)

CREATE TABLE TEMP1 (ID_VAL INT)
INSERT INTO TEMP1 SELECT 1 UNION ALL SELECT 3 UNION ALL SELECT 5 UNION ALL SELECT 8 UNION ALL SELECT 23 UNION ALL SELECT 4 UNION ALL SELECT 589 

SELECT * FROM TEMP1

SELECT * 
FROM TEMP1
LEFT JOIN TX ON TEMP1.ID_VAL = TX.UID

输出:

ID_VAL      UID
----------- -----------
1           1
3           NULL
5           5
8           NULL
23          NULL
4           4
589         NULL
于 2017-05-02T08:39:02.537 回答