我有两张桌子,一张是针对个人的,另一张是针对他们公司的。
每个表都有一个用于区域设置的列,这对于公司是强制性的,但对于个人而言则是强制性的。这个想法似乎是,如果个人没有设定偏好,他们就会被认为是他们公司的所在地。
我想为个人选择区域设置,如果单个区域设置为null,则使用公司默认值,我想要执行以下操作(我认为在MySql中不可能)...
SELECT
ISNULL(individual.Locale, company.Locale) `Locale`
FROM
individual
INNER JOIN
company ON company.CompanyId = individual.CompanyId
WHERE
individual.IndividualId = 1
有没有一种很好的方法可以做到这一点 - 或者我最终会发送两个Locale并在代码中做出决定?
答案 0 :(得分:4)
您可以使用COALESCE()
函数在其参数中返回第一个非NULL值。此函数也可用于大多数其他RDBMS,如SQL-Server,Oracle 9,Postgres 8:
SELECT
COALESCE(individual.Locale, company.Locale) AS Locale
FROM
individual
INNER JOIN
company ON company.CompanyId = individual.CompanyId
WHERE
individual.IndividualId = 1
答案 1 :(得分:3)
你几乎拥有它,你想要的是IFNULL()
SELECT
IFNULL(individual.Locale, company.Locale) `Locale`
FROM
individual
INNER JOIN
company ON company.CompanyId = individual.CompanyId
WHERE
individual.IndividualId = 1
答案 2 :(得分:2)
SELECT
(CASE
WHEN individual.Locale IS NULL THEN company.Locale
ELSE individual.Locale
END) 'Locale'
FROM
individual
INNER JOIN
company ON company.CompanyId = individual.CompanyId
WHERE
individual.IndividualId = 1