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语句,以使其更具可读性和可维护性。