返回提供的列表中的非匹配值
假设我有一个表USR返回提供的列表中的非匹配值
user_name User_id
Abcd 1
Abce 2
Abcf 3
现在,如果我打像
Select user_name from USR where user_name IN ('Abcd','Abce','Abcg','Avfd','Asdf')
查询我得到一个输出
Abcd
Abce
现在什么如果我想要这个输出的非匹配参数。
Abcg
Avfd
Asdf
有没有办法做到这一点?
感谢您的建议。
编辑:我没有获得创造任何&唯一能做的DQL
如何做一个新表温度
abcd
abce
abcg
avfd
asdf
然后
Select user_name from Temp where user_name NOT IN USR
不错,但我已经告诉我不能创建任何东西......所以没有表 – perilbrain 2012-02-04 18:00:55
我怀疑有一种方法可以做出临时表。 – Skyrel 2012-02-04 18:26:02
原始查询:
SELECT user_name
FROM usr
WHERE user_name IN ('Abcd','Abce','Abcg','Avfd','Asdf')
;
要反向逻辑,只要加入“不”:
SELECT user_name
FROM usr
WHERE user_name NOT IN ('Abcd','Abce','Abcg','Avfd','Asdf')
;
哎呀,看来你想让它周围的其他方法:(该解决方案可以需要其他的语法,这取决于你的DBMS/SQL方言)这句法对于PostgreSQL是经由CTE:
WITH zzz(zname) AS (
VALUES ('three'),('four'), ('five')
)
SELECT * FROM zzz
WHERE zzz.zname NOT IN (select zname FROM usr)
;
生成一些数据:
SET search_path='tmp';
DROP TABLE usr;
CREATE TABLE usr
(id INTEGER NOT NULL
, zname varchar
);
INSERT INTO usr(id,zname) VALUES
(1, 'one'),(2, 'two')
,(3, 'three'),(4, 'four')
;
结果:
SET
DROP TABLE
CREATE TABLE
INSERT 0 4
zname
-------
five
(1 row)
我认为你错过了一点 - 我阅读它的方式是他想从IN子句中输出user_names而不是USR表。 – Goran 2012-02-04 18:12:03
@wildplasser: - 你的查询只返回'Abcf',Goran是对的。 – perilbrain 2012-02-04 18:15:59
我错过了OP。最后的查询是正确的。 ( 我认为 ...) – wildplasser 2012-02-04 18:32:39
假设你使用可以使用SQL Server 2008的电视构造函数:
SELECT 'Abcd' AS [user_name]
UNION SELECT 'Abce'
UNION SELECT 'Abcg'
UNION SELECT 'Avfd'
UNION SELECT 'Asdf'
EXCEPT
SELECT [user_name]
FROM #USER
RDBMS什么您使用的是:
这应该与任何RDBMS(我认为)工作? – 2012-02-04 18:44:36