Mysql 从数据库中不存在的输入列表中选择id
使用MySql 8.0版本:Mysql 从数据库中不存在的输入列表中选择id,mysql,sql,select,Mysql,Sql,Select,使用MySql 8.0版本: CREATE TABLE cnacs(cid VARCHAR(20), PRIMARY KEY(cid)); 那么 前两条语句执行成功。然而,下一句话没有。我的目标是从输入表[1,2]返回一个未使用的cid列表: SELECT * FROM (VALUES ('1'),('2')) as T(cid) EXCEPT SELECT cid FROM cnacs; 理论上,我希望输出为“2”,因为它还没有被添加。前面提到的查询是受Remus在上的回答启发的,这至少是
CREATE TABLE cnacs(cid VARCHAR(20), PRIMARY KEY(cid));
那么
前两条语句执行成功。然而,下一句话没有。我的目标是从输入表[1,2]返回一个未使用的cid列表:
SELECT * FROM (VALUES ('1'),('2')) as T(cid) EXCEPT SELECT cid FROM cnacs;
理论上,我希望输出为“2”,因为它还没有被添加。前面提到的查询是受Remus在上的回答启发的,这至少是您试图做的事情的正确语法 如果这个查询不仅仅是一个学习练习,那么我会重新考虑这个方法,将这些“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
您使用的是哪种数据库管理系统?并非所有产品在SQL-2016之外都具有以下功能:F641,行和表构造函数,F591,派生表和F661,简单表。MySQL不支持使用该语法的
VALUES()
。作为参考,我使用:完美,谢谢。在这个特定的例子中,我只需要一个唯一的ID,所以我只需将LIMIT 1附加到查询中,并在return中获得1行。我是初学者,认为所有SQL语言都是语法上的unified@ThomasBraun有很多共同点,所有主要的DBMS产品都支持ansi标准,但除此之外,每个产品都有自己的特点。不管出于什么原因,MySql确实比大多数MySql都有更多的细节。有好的sql语言转换服务吗?我希望使用pgsql、sqlite和mssql@ThomasBraun可能有一些工具声称可以做到这一点,但根据我的经验,那些声称可以做到这一点的工具很少能达到销售目标。如果可移植性很重要,那么最好的选择就是尽可能地遵循ansi标准,并且只有在提供了显著简化的情况下才使用特定于平台的sql。例如,早期MySql版本不支持窗口函数,但它们确实可以简化查询。您可以使用类似于though的工具来检查给定的查询/语法是否可以在这些平台上运行。
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