尝试使用IF EXISTS自动选择从哪个表中选择记录。
我只是通过以下代码获得以下错误消息。
我哪里错了?
<taSopLoAuto>
错误:#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在'IF EXISTS(SELECT 1 FROM Users WHERE Reference ='USR00000007')附近使用正确的语法。在第1行选择SELECT * FROM'
答案 0 :(得分:2)
问题在于MySQL。 IF
- 作为控制流 - 仅适用于编程块,如存储过程,存储函数和触发器。
假设两个表中的列相同,您可以作为单个查询执行所需的操作:
SELECT u.*
FROM Users u
WHERE u.Reference = 'USR00000007'
UNION ALL
SELECT s
FROM Staff s
WHERE s.Reference = 'USR00000007' AND
NOT EXISTS (SELECT 1 FROM Users u2 WHERE u2.Reference = 'USR00000007')
答案 1 :(得分:0)
如果你想要两个查询的联合,那么两个字段都有相同数量的字段(如果需要,你可以添加空字段来查询),字段应该有相似的类型,所以试试这个:
SELECT Users.id as user_id, null as staff_id, some_other_number_field, some_other_char_field
FROM Users
WHERE Reference='USR00000007'
SELECT null , Staff.id, some_other_number_field, some_other_char_field
FROM Staff
WHERE Reference='USR00000007'
and not EXISTS (SELECT 1 FROM Users WHERE Reference='USR00000007');
也许你需要像这样的查询,总是只获得参考用户:
SELECT *
FROM Users
WHERE (Reference='USR00000007'
or exists (
SELECT 1
FROM Staff
WHERE Reference='USR00000007'
and Staff.user_id = Users.id));
但您必须具有类似于“和Staff.user_id = Users.id”的连接条件