Два столбца в функции ISNULL в MySql - PullRequest
2 голосов
/ 06 июля 2011

У меня есть две таблицы, одна для частных лиц, а другая для их компании.

В каждой таблице есть столбец для локали, это обязательно для компании, но не для отдельного человека. Похоже, идея заключается в том, что если человек не устанавливает предпочтения, предполагается, что он находится в месте действия своей компании.

Я хотел бы выбрать языковой стандарт для отдельного человека, используя значение по умолчанию для компании, если индивидуальный языковой стандарт является нулевым, и я подумал сделать следующее (что я не считаю возможным в MySql) ...

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

Есть ли хороший способ сделать это - или я просто собираюсь в итоге отослать обе локали обратно и принять решение в коде?

Ответы [ 3 ]

4 голосов
/ 06 июля 2011

Вы можете использовать функцию COALESCE(), которая возвращает первое ненулевое значение среди своих аргументов. Эта функция также может использоваться в большинстве других СУБД, таких как SQL-сервер , 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
3 голосов
/ 06 июля 2011

У вас в значительной степени было то, что вы хотите IFNULL()

SELECT
    IFNULL(individual.Locale, company.Locale) `Locale`
FROM
    individual
INNER JOIN
    company ON company.CompanyId = individual.CompanyId
WHERE
    individual.IndividualId = 1
2 голосов
/ 06 июля 2011

Попробуйте оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...