объединить несколько полей в одну таблицу - PullRequest
1 голос
/ 17 сентября 2010

У меня есть 2 таблицы (есть больше, но не связанных с вопросом) optionValue и productStock

Я хочу получить имена параметров из таблицы optionValue для каждого параметра option1, option2, option3 (приведенный ниже запрос поможет разобраться в этом)

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

    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, но я не уверен, как это исправить (если это можно исправить)

Я читал в нескольких местах об использовании IN или COALESCE, но я не понимаю, как их использовать.

Ответы [ 2 ]

2 голосов
/ 17 сентября 2010

Кажется, что ваш синтаксис немного неправильный.

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

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

0 голосов
/ 17 сентября 2010

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

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

...