2011-01-05 3 views
2

У меня есть следующие таблицы:SQL объединения данных из других таблиц

товара (таблица) не имя цена описание

Item-заказ (таблица) Идентификатор_пользователя Itemid DESCRIPTION1 DESCRIPTION2

Если элемент имеет описание в пользовательской таблице товаров, я хочу показать это описание else, я показываю описание из элемента t возможность.

Я сделал запрос, в котором i inner присоединился к пользовательской таблице элементов item.no = item-custom.itemid. Это работает нормально, если элемент имеет описание в пользовательской таблице элементов. Но если у него нет описания, запрос не возвращает никаких данных.

Как написать этот запрос, чтобы я всегда получал запись элемента, независимо от того, имеет ли оно описание в пользовательской таблице элементов.

Вот что у меня есть:

SELECT item.description, item-custom.description1, item-custom.description 
FROM item 
INNER JOIN item-custom ON item.no = item-custom.itemid 

ответ

3

Вы можете сделать это, используя LEFT JOIN вместо внутреннего соединения. Вы можете больше узнать о левых соединениях here Внутреннее соединение принимает только записи из обеих таблиц, которые имеют столбцы с нулевым значением. Поэтому, если описание пусто (NULL), запись не будет отображаться. При использовании левого соединения это будет.

SELECT item.description, item-custom.description1, item-custom.description 
FROM item 
LEFT JOIN item-custom ON item.no = item-custom.itemid 
2
SELECT item.description, item-custom.description1, item-custom.description 
FROM item 
LEFT OUTER JOIN item-custom ON item.no = item-custom.itemid 
0

Попробовать где предложение вместо

SELECT item.description, item-custom.description1, item-custom.description 
FROM item as item , item-custom as item-custom 
WHERE item.no = item-custom.itemid 
0
SELECT CASE WHEN item-custom.description2 IS NOT NULL 
THEN item-custom.description2 
ELSE item.description END, ... 
1

Я думаю, что это больше подходит для вашего состояния

Sql Server:

SELECT ISNULL(item.description, item-custom.description) as descriptin 
FROM item 
LEFT OUTER JOIN item-custom ON item.no = item-custom.itemid 

MySql

SELECT COALESCE(item.description, item-custom.description) as descriptin 
FROM item 
LEFT OUTER JOIN item-custom ON item.no = item-custom.itemid 

ISNULL или COALESCE Возвращает первый ненулевой аргумент

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