MySQL选择时的大小写

MySQL选择时的大小写,mysql,sql,Mysql,Sql,我有以下疑问: 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

我有以下疑问:

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;
希望这是有道理的。。。我基本上是在尝试选择从
法术\u伤害
提供的
类型
为0,从
法术\u削弱
提供的
类型
为1

我还想选择
def_拼写
中的所有内容


有人能解决这个问题吗?我以前从未使用过这样的案例,也不知道如何使用。

您将无法做到这一点。您需要将其拆分为两个查询,或者使用
CASE
语句手动指定每个列

SELECT CASE WHEN a.`type` = 0 THEN b.col1 
            WHEN a.`type` = 1 THEN c.col1
       END  AS col1
       , CASE WHEN a.`type` = 0 THEN b.col2
            WHEN a.`type` = 1 THEN c.col2
       END  AS col2
FROM `def_spell`  a
LEFT JOIN `spells_damage` b ON a.`id` = b.`spell_id` 
LEFT JOIN `spells_weaken` c ON a.`id` = c.`spell_id` 
WHERE a.`id` = 1;

不能使用CASE在这两个表的输出之间进行选择

不幸的是,这是容易的一点;计算出(a)你想做什么和(b)达到同等的结果需要更长的时间

如果你能给我们提供法术削弱和法术伤害表中各列的信息,那就容易多了。想必,有一些区别;否则,你就只有一张桌子了。事实上,一个单一的法术表可能仍然是一个更好的设计

让我们把疑虑放在一边。假设咒语削弱和咒语伤害表是联盟兼容的,你可以使用联盟来获得结果:

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;

修好它?你把它格式化怎么样?对不起,堆栈溢出清除“符号”…当
def\u咒语
类型
时选择CASE
然后
咒语伤害
*当
def\u咒语
类型
类型
=1
咒语削弱
结束于
def\u咒语
左侧连接
咒语伤害
def\u咒语
id
=
法术伤害
法术id
左接
法术削弱
法术定义
id
=
法术削弱
法术id
其中
法术定义
id
=1;我不熟悉堆栈溢出,有没有办法解决它?我不确定
选择CASE WHEN。。。表1.*ELSE表2.*
有效(如果表的列数和数据类型完全相同,则*可能有效。如果有效,从维护角度来看,这很糟糕,如果您在我的店铺工作,它也不会飞起来(无论
选择*
)。必须有更好的方法,即使这意味着编写更长的SQL语句,以使其更具可读性和可维护性。