【问题标题】:MySQL IF EXISTS not workingMySQL IF EXISTS 不工作
【发布时间】:2016-07-08 06:26:46
【问题描述】:

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

我刚刚收到以下错误消息,代码如下。

我哪里错了?

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

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

【问题讨论】:

标签: mysql sql if-statement exists


【解决方案1】:

问题出在 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')

【讨论】:

  • 顺便提一下,我需要返回任一表中的所有行。员工表少了 2 列。我是否需要手动列出我想要的确切内容,而不是使用 u.* 和 s.*?
  • 你确定他在用户和员工上有相同的字段吗?
  • 并不是所有的都是一样的。用户有额外的字段,而员工有一些不同的列。
  • @Rs2845 。 . .那么你不能用一个查询做你想做的事,除非你为两个表中不同的列包含占位符。
【解决方案2】:

如果你想合并两个查询,两个mast有相同数量的字段(如果你需要,你可以添加空字段来查询)并且字段应该有相似的类型,所以试试这个:

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));

但你必须有类似于“and Staff.user_id = Users.id”的加入条件

【讨论】:

  • 这段代码成功地从用户表中检索到正确的记录,但不是从员工表中检索到正确的记录。我很惊讶 MySQL 没有更好的方法来处理条件。很想将其保留为两个单独的查询,并使用 PHP if-else 语句来处理条件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 2022-01-17
  • 2017-06-06
  • 1970-01-01
  • 2011-11-15
相关资源
最近更新 更多