【问题标题】:MySQL column with conditional value具有条件值的 MySQL 列
【发布时间】:2016-11-09 15:58:14
【问题描述】:
我有这个基本的 SQL 语句:
SELECT p.s1,pr.s1 FROM `prop` p LEFT OUTER JOIN prom pr ON pr.id = p.prom
我的意图是有一个值为pr.s1 的列(如果它不为空),而p.s1 在其他情况下。这很简单,但我不知道如何正确地做到这一点。
任何想法将不胜感激,谢谢。
【问题讨论】:
标签:
mysql
case
conditional-statements
【解决方案1】:
你可以使用IFNULL:
SELECT IFNULL(pr.s1, p.s1) AS s1
FROM `prop` p
LEFT OUTER JOIN prom pr
ON pr.id = p.prom
【解决方案2】:
您也可以使用COALESCE:
SELECT COALESCE(pr.s1, p.s1)
FROM prop p
LEFT OUTER JOIN prom pr
ON pr.id = p.prom
使用COALESCE() 而不是IFNULL() 的一个好处是前者可以接受两个以上的参数。因此,例如,如果您有两个备份列以防 NULL 值,您可以这样做:
SELECT COALESCE(pr.s1, p.s1, p.someOtherCol)
【解决方案3】:
你可以使用COALESCE():
SELECT p.s1,COALESCE(pr.s1,p.s1)
FROM `prop` p
LEFT OUTER JOIN prom pr
ON pr.id = p.prom
虽然您可能有两个相同的列,但我认为您的意思是:
SELECT COALESCE(pr.s1,p.s1) as s1
FROM ...
【解决方案4】:
你可以使用 ifnull
SELECT p.s1, ifnull(pr.s1, p.s1)
FROM `prop` p
LEFT OUTER JOIN prom pr ON pr.id = p.prom