2016-06-04 4 views
1

Здравствуйте, я в настоящее время пытаюсь объединить 3 типа таблиц. У меня есть способ сделать это с 2, которые имеют одинаковые значения, но что происходит, когда вы хотите, чтобы третья таблица имела тот же pk, что и второй, но не первый? И я ударил гигантскую кирпичную стену ... как я могу решить эту проблему?INNER, OUTER OR RIGHT JOIN с 3 таблицами, где один имеет тот же PK, что и первый, но 1-й не

SELECT xxx.orderid, xxx.ordertime,xxx2.produdct, xxx2.product type, xxx3.priscut xx3.pricename FROM xxx 
INNER JOIN xxx2 ON xxx.orderid= xxx2.orderid 
RIGHT JOIN xxx3 ON xxx2.productid = xx3.productid; 

наилучшими пожеланиями, Майк

+1

Я не совсем уверен, почему вы должны использовать 'правую join' (попробуйте' внутренний join' или ее 'left join' в зависимости от того, что вы хотите), но ваш код будет работать - почему вы сомневаетесь в этом? Вы можете присоединить столько таблиц, сколько хотите, при любом условии, которое вам нужно, они не должны быть напрямую связаны с первой таблицей (и на самом деле в большинстве случаев ее нет). – Solarflare

+0

хорошо, когда он говорит, что у меня есть ошибка, на последней строке ... почему я пытаюсь присоединиться к предыдущему соединению .. :( – MikeBroski

+1

Итак, стандартный вопрос: что вы получаете и чего ожидаете? (И добавьте запятая после 'priscut' в первой строке и, конечно,' xxx3' в последнем объединении вместо 'xx3' - но я думаю, что это просто заполнители в любом случае). Знаете ли вы, что такое« правильное соединение »? Попробуйте нормальный' join' (без «права»), я предполагаю, что это то, чего вы ожидаете. – Solarflare

ответ

1

Просто используйте внутреннее соединение

SELECT 
xxx.orderid 
, xxx.ordertime 
,xxx2.produdct 
, xxx2.producttype 
, xxx3.priscut xx3.pricename 
FROM xxx 
INNER JOIN xxx2 ON xxx.orderid= xxx2.orderid 
INNER JOIN xxx3 ON xxx2.productid = xx3.productid; 
+0

Thanks , вы абсолютно правы, внутреннее соединение - это правильный случай, чтобы избежать значений NULL, которые я думаю. al ittle запутался, почему когда-либо использовать правое и левое соединение ... – MikeBroski

+1

Да, чтобы избежать нулевого значения, внутреннее соединение - правильное решение, потому что в базирующихся только результирующих строках соответствует совпадение .. (для каждого внутреннего соединения) – scaisEdge