能不能用 SQL 查出没有在数据表里出现的值

2023-04-09 13:12:44 +08:00
 yuann72

一个数据表只有一个 name 列, 这个数据表只有两行, 分别是 A 和 B 。

name
A
B

现在有几个数据,分别是 A,B,C,D ,有没有办法使用 SQL 语句查出 A,B,C,D 这 4 个中哪些没有出现在数据表里?
按我举的这个例子,最后应该输出 C 和 D

2724 次点击
所在节点    问与答
25 条回复
c6h6benzene
2023-04-09 20:23:14 +08:00
或者 select except
CHUB
2023-04-09 23:09:41 +08:00
SELECT unnest(ARRAY['A', 'B', 'C', 'D']) EXCEPT SELECT column_name FROM table_name;

或者更简单的:

SELECT column_name FROM table_name GROUP BY column_name; 再用目测法看看缺了哪个
jhdxr
2023-04-10 06:08:32 +08:00
pgsql 和 mssql 上面都有答案了,我来贴个 mysql 的: https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html

( mysql 8 之前或者 mariadb 用变量+字符串函数也行,就是写起来太太太太麻烦了。。。
hero0earth
2023-04-10 08:33:31 +08:00
可以使用公共表达式( https://dev.mysql.com/doc/refman/8.0/en/with.html )构建临时表,再做外连接
arvinsilm
2023-04-10 10:48:39 +08:00
可以干,但属实没必要,数据库不是用来干这事的。不如写个脚本,用时跑一把完事。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/930970

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX