我有一个表,其中包含一列,该列是否引用其他表中的其他行。 例如: -表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
有什么更好的方法可以写吗?
谢谢
答案 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'
)
干杯!