首页 > 解决方案 > 从数据库中不存在的输入列表中选择 id

问题描述

使用 MySql 8.0 版:

CREATE TABLE cnacs(cid VARCHAR(20), PRIMARY KEY(cid));

然后,

INSERT INTO cnacs VALUES('1');

前两条语句成功执行。然而,下一个声明没有。我的目标是从输入表 [1, 2] 返回未使用的 cid 列表:

SELECT * FROM (VALUES ('1'),('2')) as T(cid) EXCEPT SELECT cid FROM cnacs;

理论上,我希望输出为“2”,因为它尚未添加。上述查询的灵感来自 Remus 在https://dba.stackexchange.com/questions/37627/identifying-which-values-do-not-match-a-table-row上的回答

标签: mysqlsqlselect

解决方案


这至少是您尝试做的正确语法。

如果这个查询不仅仅是一个学习练习,尽管我会重新考虑这种方法,将这些 '1' 和 '2' 值(或者最终存在的许多值)存储在他们自己的表中

SELECT Column_0
  FROM (SELECT * FROM (VALUES ROW('1'), ROW('2')) TMP) VALS
  LEFT
  JOIN cnacs
    ON VALS.Column_0 = cnacs.cid
 WHERE cnacs.cid IS NULL

推荐阅读