2010-03-20 100 views
12

我想知道是否可以在同一张表上运行mysql命令,该命令可以在第一个给定字段为空的情况下选择替代字段。MySQL:如果给定字段为空,则选择备选字段

例如:我有一个名为“职位”,其中有“介绍”和“内容”的表。在同样的语句中,如果“intro”为空,但是在结果数组中没有两者,我希望选择“content”作为结果。

在此先感谢

回答

16

可以使用IF功能:

SELECT IF(LENGTH(intro)>0, intro, content) 
FROM posts 

或者你可以测试NULL如果你的意思是空的是NULL

+0

也谢谢你,也很好! – Kyobul 2010-03-20 20:54:35

+1

+1:'CASE'将是一个可行的选择,但所有其他数据库(Oracle,Postgres,而不是SQL Server)都不支持'LENGTH'关键字 - 必须使用'LEN'),这使得查询可移植性几乎没有实际意义。 – 2010-03-20 21:13:05

14

合并是你在找什么。

SELECT COALESCE(intro, content) AS column1 
FROM table 

假设介绍为空且不是零长度字符串。

+0

谢谢,效果很棒! – Kyobul 2010-03-20 20:54:13

+1

我今天刚学到东西。很好的答案。 – Vinny 2010-03-20 21:12:03

2

有两种潜在的方法。如何处理案件陈述。

Select case when field1 <> '' then field2 else field1 end 

或者你可以使用coalesce。

select coalesce(field1, field2) 
+0

有两个以上。你有IF,IFNULL,CASE WHEN,CASE fiel1 WHEN,并且COALESCE离开我的头顶。 当“empty”表示NULL时,“<>''将不起作用。 – dkretz 2010-03-20 20:53:54

+0

感谢您,第三种方法也很有用! – Kyobul 2010-03-20 20:55:21