我想MySQL中的CASE条件有一个简单的问题,因为我没有使它工作,总是得到语法错误。
我当前的问题:我有一张表,其中包含一个id列表和一个名字。根据名称,我需要访问另一个表并从这些表中加入/获取数据。 但它不能用我的CASE,所以我只是尝试了一个超级简单的东西,但即使这样我也无法运行: - (
:input
我正在使用MySQL 5.5版
有人能帮助我吗?
非常感谢!!
答案 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;