gpt4 book ai didi

mysql - 根据条件在 MySQL 中加入不同表的最佳方法?

转载 作者:行者123 更新时间:2023-12-04 10:07:53 26 4
gpt4 key购买 nike

我有以下表格:
Licenses :

 License    |    object_type_id  |  selected_object_type_id  
L1 1 300
L4 2 300
L5 3 127
.. .. ...
object_type
id    |    type  |
1 Main
2 Sub
3 Feature
Main
id   | product  | ....
1 PMA
2 PMB
3 PMC
... ...
300 PMZZ
Sub
id  | product | ...
1 PSA1
2 PSA2
3 ...
300 PSAZZ
Feature
id  |  Feature|  ...
1 FO1
2 FO2
3 FO3
.. ..
127 FFZ127

我想要一个名为“license_mapping”的最终表
license_mapping
 license   |   license_object | license_object_type
L1 PMZZ Main
L4 PSAZZ Sub
L5 FFZ127 Feature

逻辑是,对于给定的许可证,找到 licenses.object_type_id .取决于 object_type.type 的值哪里 licenses.object_type_id = object_type.id从对应表中选择与 licenses.selected_object_type_id 匹配的产品或功能.

但是我怎么处理这个案子 MainSub因为它们具有相同的 id 和相同的列名?

如果我要编写伪 SQL 语句,它将如下所示,最后一行是我不明白如何正确执行的地方。
 SELECT
L.License,
CASE WHEN OT.type = 'Main' THEN M.Product WHEN OT.type = 'Sub' THEN S.Product WHEN OT.Type = 'Feature' THEN F.Feature END AS License_Objects,
OT.type As license_object_type
FROM
Licenses L
JOIN object_type OT on L.object_type_id = OT.id
JOIN Feature F on L.object_type_id = F.id
JOIN Main M when OT.type = 'Main' and Sub S when OT.type = 'Sub'

最佳答案

您只需要LEFT JOIN给每个Main , SubFeature selected_object_type_id 上的表值并根据 object_type 从这些表中选择适当的值:

SELECT l.License, 
CASE WHEN ot.type = 'Main' THEN m.product
WHEN ot.type = 'Sub' THEN s.product
WHEN ot.type = 'Feature' THEN f.Feature
END AS license_object,
ot.type AS license_object_type
FROM licenses l
JOIN object_type ot ON ot.id = l.object_type_id
LEFT JOIN main m ON m.id = l.selected_object_type_id
LEFT JOIN sub s ON s.id = l.selected_object_type_id
LEFT JOIN feature f ON f.id = l.selected_object_type_id
ORDER BY l.License

示例数据的输出:
License     license_object  license_object_type
L1 PMZZ Main
L4 PSAZZ Sub
L5 FFZ127 Feature

Demo on dbfiddle

关于mysql - 根据条件在 MySQL 中加入不同表的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61479146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com