如何在MySQL中使用CASE条件?

时间:2016-05-30 22:36:04

标签: mysql sql

我想MySQL中的CASE条件有一个简单的问题,因为我没有使它工作,总是得到语法错误。

我当前的问题:我有一张表,其中包含一个id列表和一个名字。根据名称,我需要访问另一个表并从这些表中加入/获取数据。 但它不能用我的CASE,所以我只是尝试了一个超级简单的东西,但即使这样我也无法运行: - (

:input

我正在使用MySQL 5.5版

有人能帮助我吗?

非常感谢!!

2 个答案:

答案 0 :(得分:2)

您的CASE需要在SELECT之后但在FROM

之前
SELECT CASE WHEN a.Name = 'Luke' THEN b.column WHEN a.Name = 'Sarah' THEN c.column ELSE d.column END AS ColumnName
FROM Table1 AS a 
LEFT OUTER JOIN Table2 AS b ON a.column = b.column
LEFT OUTER JOIN Table3 AS c ON a.column = c.column
LEFT OUTER JOIN Table4 AS d ON a.column = d.column

我认为你试图解决的问题是,如果名称等于某事,则使用一个表加入,如果名称等于其他名称,则加入另一个表。由于各种原因,这不符合您的要求。如果您想根据名称获取所有表格的数据,那么您可以在广泛的结果集中得出所有结果。

SELECT a.name, b.*, c.*, d.* 
FROM Table1 AS a 
LEFT OUTER JOIN Table2 AS b ON a.column = b.column AND a.name = 'Luke'
LEFT OUTER JOIN Table3 AS c ON a.column = c.column AND a.Name = 'Sarah'
LEFT OUTER JOIN Table4 AS d ON a.column = d.column AND a.NAME NOT IN ('Sarah', 'Luke')

这个结果看起来像是(借口*的)

NAME,b.Heading1,... b.HeadingN,c .Heading1,... c.HeadingN,NAME,d.Heading1,... d.HeadingN 卢克*****数据,********* **********数据*********** NULL NULL ********* ***** NULL ************ NULL 萨拉**** NULL,NULL ******** *******数据*************数据*********** **** NULL ************ NULL 南希*** NULL,NULL ******** ******** NULL *********** NULL ************* *数据*************数据

在任何情况下,添加更多信息(包括样本数据)可能会有所帮助,因此我们可以查看。

答案 1 :(得分:1)

case是一个返回标量值的表达式。它不能用于选择表格。

如果您的表具有相同顺序的相同列,则可以执行以下操作:

select a.*
from table_a a
where 1 = 1
union all
select b.*
from table_b b
where 1 <> 1;

使用它的一个例子是:

select a.*, (case when 1=1 then 'yes' else 'no' end) as col
from table_a a;