我有以下查询:
SELECT CASE WHEN `def_spell`.`type` = 0 THEN `spells_damage`.*
WHEN `def_spell`.`type` = 1 THEN `spells_weaken`.*
END
FROM `def_spell`
LEFT JOIN `spells_damage` ON `def_spell`.`id` = `spells_damage`.`spell_id`
LEFT JOIN `spells_weaken` ON `def_spell`.`id` = `spells_weaken`.`spell_id`
WHERE `def_spell`.`id` = 1;
希望这是有道理的...我基本上是尝试从 spells_damage
中选择所有内容,前提是 type
是 0,从 spells_weaken
中选择所有内容type
为 1。
无论如何,我还想从 def_spell
中选择所有内容。
有人可以修复查询吗?我以前从未使用过这样的案例,也不确定如何使用。
最佳答案
您不能像那样使用 CASE 在两个表的输出之间进行选择。
不幸的是,这很容易;解决 (a) 您正在尝试做的事情以及 (b) 获得同等结果需要更长的时间。
如果您向我们提供有关 Spells_Weaken 和 Spells_Damage 表中的列的信息,事情会更容易。据推测,存在一些差异;否则,您将只有一张 table 。事实上,单个 Spells 表可能仍然是更好的设计。
让我们抛开疑虑。假设 Spells_Weaken 和 Spells_Damage 表是 UNION 兼容的,您可以使用 UNION 来实现结果:
SELECT s.*, d.*
FROM def_spell AS s
LEFT JOIN spells_damage AS d ON s.id = d.spell_id
WHERE s.type = 0
AND s.id = 1
UNION
SELECT s.*, w.*
FROM def_spell AS s
LEFT JOIN spells_weaken AS w ON s.id = w.spell_id
WHERE s.type = 1
AND s.id = 1;
关于选择时的 MySQL CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10942562/