2016-09-17 2 views
0

Предположим, что у меня есть 2 таблицы:SQL Server 2008 Сохранение строк из таблицы со значениями несовпадающих из другой таблицы

FRUITS   RECIPE 
-----------  ----------------- 
id name   ver id1  id2 
-----------  ----------------- 
1 apple  1  1  1 
2 banana  2  null 3 
3 orange  3  3  3 
4 peach  4  4  2 
       5  1  null 
       6  null null 

Для того, чтобы вернуть имена для ID1 и ID2 значений Я пробовал:

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE INNER JOIN FRUITS AS F1 ON id1 = F1.name 
      INNER JOIN FRUITS AS F2 ON id2 = F2.name 

, которая возвращает:

------------------------------------ 
ver id1  name  id2 name 
------------------------------------ 
1  1  apple  1  apple 
3  3  orange  3  orange 
4  4  peach  2  banana 

Я хочу, чтобы результирующий набор включает в себя все рецепте строку, включая нули, как показано ниже:

------------------------------------ 
ver id1  name  id2  name 
------------------------------------ 
1  1  apple  1  apple 
2  null null  3  orange 
3  3  orange 3  orange 
4  4  peach  2  banana 
5  1  apple  null null 
6  null null  null null 

Спасибо за вашу помощь ...

+0

Используйте LEFT JOIN вместо INNER JOIN. –

+0

@KamilG. Вау! Великий человек ... Я пропустил это. Хорошо оценено. Благодарю. – Tres

ответ

0

Используйте LEFT JOIN вместо INNER JOIN, чтобы сохранить весь вывод, генерируемый RECIPE таблицы с дополнительной информацией, извлеченной из FRUITS:

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE 
LEFT JOIN FRUITS AS F1 ON id1 = F1.name 
LEFT JOIN FRUITS AS F2 ON id2 = F2.name 

Quote:

Ключевое слово LEFT JOIN возвращает все строки из левой таблицы (таблица1) с соответствующими строками в правой таблице (таблица2). Результат равен NULL в правой части, когда нет совпадения.

0

Необходимо использовать внешние соединения, например. Внешний

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE LEFT OUTER JOIN FRUITS AS F1 ON id1 = F1.name 
      LEFT OUTER FRUITS AS F2 ON id2 = F2.name 
+0

Спасибо, хорошо принят. Жаль, что я могу дать только 1 ответ кредита ... – Tres

2

Пользователь присоединяется как-

SELECT ver, id1, F1.name, id2, F2.name 
FROM RECIPE 
LEFT JOIN FRUITS F1 
ON id1 = F1.id 
LEFT JOIN FRUITS F2 
ON id2 = F2.id 

В запросе, вы сравниваете идентификатор fruits'name, что это неправильно.

+0

Спасибо человеку за помощь. – Tres

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