我想要实现的目标是,如果两个额外表中不存在该值,则将值插入表中。
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/