SQL 创建唯一 id WHERE 不在两个表中

Posted

技术标签:

【中文标题】SQL 创建唯一 id WHERE 不在两个表中【英文标题】:SQL create unique id WHERE not IN two table 【发布时间】:2016-03-03 06:34:54 【问题描述】:

我的代码:

SELECT FLOOR(RAND() * 9999) AS random_num FROM product_list
WHERE 'random_num' NOT EXISTS 
(SELECT code_id FROM product_list) 
AND 'random_num' NOT EXISTS (SELECT p_code_id FROM item_group)
LIMIT 1 

当我用 php 代码运行时结果什么都没有,请指教。

【问题讨论】:

“不工作” - 不是问题 对不起@MitchWheat,因为我的英语不好:) WHERE 'random_num' NOT EXISTS 是无效的 SQL。列名不能用单引号括起来。 'random_num' 是一个字符串常量。 random_num 是列名。另外:在 exists 运算符前面放置列名(或字符串常量)也是无效的 我该怎么办? 避免为您的问题添加答案。请参阅How does accepting an answer work 了解更多信息 【参考方案1】:

试试

SELECT MAX(maxid) + 1
FROM (
SELECT MAX(code_id) maxid FROM product_list
UNION
SELECT MAX(p_code_id) maxid FROM item_group
)

【讨论】:

【参考方案2】:

使用派生表,并调整NOT EXISTSs:

select random_num
from
(
  SELECT FLOOR(RAND() * 9999) AS random_num
  FROM product_list
) dt
WHERE NOT EXISTS (SELECT * FROM product_list where random_num = code_id) 
  AND NOT EXISTS (SELECT * FROM item_group where random_num = p_code_id)
LIMIT 1 

【讨论】:

以上是关于SQL 创建唯一 id WHERE 不在两个表中的主要内容,如果未能解决你的问题,请参考以下文章

SPARK SQL 不在或不存在

在 sql 数据库中创建唯一列 id 的首选方法

在Oracle数据库中创建一个表,用两个键做联合主键,sql语句该怎么写?

如何使用 SQL Server 返回不在表中的 id

sql中创建组合主键和组合外键

SQL:选择表 A 中不在表 B 中的所有唯一值