Выделите оператор нескольких таблиц с новым столбцом, значение которого зависит от другого в другой таблице - PullRequest
0 голосов
/ 17 января 2020

У меня есть таблица, содержащая столбец, ссылающийся на другие строки в других таблицах или нет. Например: - таблица Table_Cart имеет столбец product в виде числа - если продукт является фруктом, то он указывает на строку в таблице Table_Fruit, - если продукт является овощем, то он указывает на строку в таблице Table_Vegetable - если нет из вышеперечисленного мы можем оставить значение пустым

Мне нужно сгенерировать вывод, например, указав для каждого продукта, является ли он "фруктовым" / "овощным" / пустым, чтобы оно выглядело как

| product | category |
| 1111111 | fruit    |
| 2222222 | vegetable|
| 1111113 | fruit    |
| 4444444 |          |

Сегодня sql, который я написал, -

select T1.product, T2.category
from Table_Cart T1 left join
     (select product, "fruit" as "category" from Table_fruit
      union
      select product, "vegetable" as "category" from Table_vegetable
     ) T2
     on T1.product = T2.product

Есть ли лучший способ написать это?

Спасибо

1 Ответ

3 голосов
/ 17 января 2020

Вы можете избежать использования подзапроса и выполнить прямое LEFT JOIN следующим образом:

 SELECT
     T.PRODUCT,
     CASE
         WHEN TF.PRODUCT IS NOT NULL THEN 'fruit'
         WHEN TV.PRODUCT IS NOT NULL THEN 'vegetable'
     END AS CATEGORY
 FROM
     TABLE_CART T
     LEFT JOIN TABLE_FRUIT TF ON ( T.PRODUCT = TF.PRODUCT )
     LEFT JOIN TABLE_VEGETABLE TV ON ( T.PRODUCT = TV.PRODUCT )

Также обратите внимание, что " (двойные кавычки) для постоянного значения столбца ("fruit", "vegetable") не правильно, он должен быть заключен в ' (одинарные кавычки), такие как ('fruit', 'vegetable')

Cheers !!

...