mysql - UNION 查询功能和查询结构

标签 mysql sql not-exists

我想要实现的目标是,如果两个额外表中不存在该值,则将值插入表中。

INSERT INTO visitor(
  visitor_username,
  email,
  PASSWORD
)
SELECT * FROM
(
SELECT
    'admin2000',
    'adminemail@mail.com',
    '123456'
) AS tmp
WHERE NOT EXISTS
(
SELECT
    admin.admin_username,
    admin.email
FROM
    admin AS admin
WHERE
    admin.admin_username = 'admin2000' AND admin.email = 
'adminemail@mail.com'
UNION
SELECT
staff.staff_username,
staff.email
FROM
staff AS staff
WHERE
staff.staff_username = 'admin2000' AND staff.email = 
'adminemail@mail.com'
 )
LIMIT 1

在 WHERE NOT EXIST 部分,当我只要求 *_username(例如:admin_username 或 Staff_username)时,它工作得很好,但是当我需要验证电子邮件是否也存在时,它无法按预期工作。

我是否正确使用了 WHERE NOT EXIST ?如果用户名“admin2000”和电子邮件“adminemail@mail.com”存在于“admin”表中,并且我试图将其插入“visitor”表中,那么它会插入它,并且不应该这样做。

最佳答案

问题出在子查询中的AND。它搜索具有该用户名和该电子邮件的行。因此,如果您有一个名为 admin2000 的管理员,但具有不同的电子邮件地址,则子查询不会返回该管理员,因此将插入新行。

OR代替AND,问题就解决了。

关于mysql - UNION 查询功能和查询结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53238758/

相关文章:

MySQL 触发器自动更新(或插入)列字段

mysql - 为什么 SQL NOT EXISTS 返回所有 NULL 值的 1 条记录

mysql - 如何将 CommandText 传递给另一个 MySqlCommand?

mysql - SQL 嵌套 CASE WHEN 语句

sql - 如何对具有多个条目的一列使用分组依据?

sql - 将唯一值插入数据库 PGSQL/MSSQL

postgresql - 不存在的 PostgreSQL 重复值

MySQL:检索与两个用户ID相关的结果

mysql - PCRE Regex - 替换序列化字符串中的 URL

mysql - SQL 查询返回子查询的精确列表