2017-04-16 198 views
0

MySQL查询:Mysql的CASE WHEN JOIN语句错误

SELECT * 
FROM `pet_info` LEFT JOIN 
    `lostpets` 
    ON `pet_info`.`id` = `lostpets`.`petid` LEFT JOIN 
    `pet_images` 
    ON `pet_info`.`id` = `pet_images`.`petid` 
    CASE WHEN `pet_info`.`pet_cat` = 2 
      THEN LEFT JOIN `cat_breeds` 
       ON `cat_breeds`.`id` = `pet_info`.`pet_breed` 
     WHEN `pet_info`.`pet_cat` = 1 
     THEN LEFT JOIN `dog_breeds` 
       ON `dog_breeds`.`id` = `pet_info`.`pet_breed` 
WHERE `pet_info`.`pet_user_id` = 581 

错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CASE WHEN `pet_info`.`pet_cat` = 2 THEN LEFT JOIN `cat_breeds` ON `cat_breeds`.`' at line 1 

我怎么能解决错误?错误在哪里?请帮帮我。

+2

这根本不是'CASE'所做的。它是一个标量表达式,它在'FROM'子句中返回一个值,而不是一个条件构造。 –

回答

3

我想你打算:

SELECT * 
FROM `pet_info` LEFT JOIN 
    `lostpets` 
    ON `pet_info`.`id` = `lostpets`.`petid` LEFT JOIN 
    `pet_images` 
    ON `pet_info`.`id` = `pet_images`.`petid` LEFT JOIN 
    `cat_breeds` 
    ON `cat_breeds`.`id` = `pet_info`.`pet_breed` AND 
     `pet_info`.`pet_cat` = 2 LEFT JOIN 
    `dog_breeds` 
    ON `dog_breeds`.`id` = `pet_info`.`pet_breed` AND 
     `pet_info`.`pet_cat` = 1 
WHERE `pet_info`.`pet_user_id` = 581; 

注:

  • 有了这样的查询,你不应该使用SELECT *,你应该明确地选择你想要的列。不同的表格具有相同名称的列。
  • 您应该使用列别名。我没有把这些放入查询中,但他们是个好主意。
  • 在真正的查询中,您将在SELECT中使用表达式来组合cat_breedsdog_breeds的列,例如COALESCE(cat_breeds.col1, dog_breeds.col1) as col1
+0

#1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在“pet_info”附近使用正确的语法.'pet_cat' = 1 WHERE'pet_info'.'pet_user_id' = 581第1行限制0,30' –