选择带有新列的语句多表,该列的值取决于其他表中的其他列

时间:2020-01-17 07:13:38

标签: sql oracle select

我有一个表,其中包含一列,该列是否引用其他表中的其他行。 例如: -表Table_Cart的列产品为数字 -如果产品是水果,则它指向表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 个答案:

答案 0 :(得分:3)

您可以避免使用子查询,并直接执行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'

干杯!