关于sql:MySQL IF EXISTS不起作用

MySQL IF EXISTS not working

尝试使用IF EXISTS自动选择要从中选择记录的表。

我刚得到下面的错误消息与下面的代码。

我要去哪里错了?

1
2
3
4
IF EXISTS (SELECT 1 FROM Users WHERE Reference='USR00000007')
    SELECT * FROM Users WHERE Reference='USR00000007'
ELSE
    SELECT * FROM Staff WHERE Reference='USR00000007';

错误:#1064-您的SQL语法有错误; 在第1行的'IF EXISTS(SELECT 1 FROM Users WHERE Reference ='USR00000007')SELECT * FROM'附近,查看与您的MySQL服务器版本相对应的手册以使用正确的语法。


问题出在MySQL中。 IF(作为控制流)仅在编程块(例如存储过程,存储函数和触发器)中工作。

假设两个表中的列相同,则可以通过单个查询来执行所需的操作:

1
2
3
4
5
6
7
8
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
2
3
4
5
6
7
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');

也许您需要这样的查询,以始终仅获得用户作为参考:

1
2
3
4
5
6
7
8
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"的加入条件