2010-09-17 7 views
1

У меня есть 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 Ther нет матчей в optionValue таблице, но им не уверен, как это исправить (если это поправимо)

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

ответ

0

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

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

2

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

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

Visual explanation of SQL joins.

Смежные вопросы