Присоединяйтесь к нескольким полям на одну таблицу

StackOverflow https://stackoverflow.com/questions/3737616

Вопрос

У меня есть 2 стола (есть все больше, но ООН связан с вопросом) optionValue а также productStock

Я хочу получить имена опций из таблицы OptionValue для каждой опции1, опция2, опция3 (запрос ниже будет поможет сделать больше смысла)

Ниже приведена моя попытка, текущий запрос работает только, если все параметры устанавливаются, но возвращает NULL, если какой-либо вариант не установлен:

    SELECT s.option1, n1.name s.optionName1, 
           s.option2, n2.name s.optionName2,
           s.option3, n3.name s.optionName3
    FROM productStock as s 
    INNER JOIN optionValue n1 on s.option1 = v1.optionValueID
    INNER JOIN optionValue n2 on s.option2 = v2.optionValueID
    INNER JOIN optionValue n3 on s.option3 = v3.optionValueID
    WHERE s.productStockID = 1

Я понимаю, почему это не работает, потому что когда вариант null не совпадает с optionValue стол, но я не уверен, как это исправить (если он фиксируется)

Я прочитал пару мест в использовании в или Coalesce, но я не понимаю, как их использовать.

Это было полезно?

Решение

Что вам действительно нужно сначала, чтобы исправить ваш дизайн базы данных. В любое время у вас есть такие поля: s.option1, s.option2, s.option3

Тогда то, что вам действительно нужно, это ребенок для хранения информации. Что происходит, когда вам нужно 6 вариантов или 25? Это очень плохой дизайн базы данных и приведет к тому, что никакого конца проблем, нарушающих неэффективное запрос, которое теперь нужно написать. Это рак в основе вашей системы и должен быть зафиксирован до того, как все будет сделано.

Другие советы

Похоже, некоторые из вашего синтаксиса немного неверны.

Кроме того, вы хотите LEFT OUTER JOIN вместо INNER JOIN.

Визуальное объяснение SQL присоединяется.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top