假设我有一张表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
答案 0 :(得分:0)
如何制作新表Temp
abcd
abce
abcg
avfd
asdf
然后
Select user_name from Temp where user_name NOT IN USR
答案 1 :(得分:0)
您的原始查询:
SELECT user_name
FROM usr
WHERE user_name IN ('Abcd','Abce','Abcg','Avfd','Asdf')
;
要反转逻辑,只需添加“NOT”:
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)
答案 2 :(得分:0)
假设您正在使用可以使用SQL Server 2008 TV Constructors:
SELECT user_name
FROM (VALUES('Abcd'),('Abce'),('Abcg'),('Avfd'),('Asdf')) AS Q(user_name)
EXCEPT
SELECT [USER_NAME]
FROM #USER
这适用于任何RDBMS(我认为):
SELECT 'Abcd' AS [user_name]
UNION SELECT 'Abce'
UNION SELECT 'Abcg'
UNION SELECT 'Avfd'
UNION SELECT 'Asdf'
EXCEPT
SELECT [user_name]
FROM #USER