MySql中ISNULL函数中的两列

时间:2011-07-06 10:34:39

标签: mysql sql

我有两张桌子,一张是针对个人的,另一张是针对他们公司的。

每个表都有一个用于区域设置的列,这对于公司是强制性的,但对于个人而言则是强制性的。这个想法似乎是,如果个人没有设定偏好,他们就会被认为是他们公司的所在地。

我想为个人选择区域设置,如果单个区域设置为null,则使用公司默认值,我想要执行以下操作(我认为在MySql中不可能)...

SELECT
    ISNULL(individual.Locale, company.Locale) `Locale`
FROM
    individual
INNER JOIN
    company ON company.CompanyId = individual.CompanyId
WHERE
    individual.IndividualId = 1

有没有一种很好的方法可以做到这一点 - 或者我最终会发送两个Locale并在代码中做出决定?

3 个答案:

答案 0 :(得分:4)

您可以使用COALESCE()函数在其参数中返回第一个非NULL值。此函数也可用于大多数其他RDBMS,如SQL-ServerOracle 9Postgres 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)

尝试CASE...WHEN...THEN声明

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