我正在考虑使用以下3个表格进行内部联接的可能性。
CategorizedItems
CategoryId | linkid | type
------------------------------
1 1 a1
1 2 a1
1 1 a2
A1_Items
itemid | Name | A1 Fields
-----------------------------
1 N1
2 N2
A2_items
itemid | Name | A2 Fields
-----------------------------
1 N3
CategorizedItems.linkId可以容纳A1_items.itemid和A2_items.itemid。因此,它们之间没有主键 - 外键关系。
我需要获取CategoryId 1下的项目名称。
是否有可能这样做。我在A1_items和A2_Items中没有任何代表'type'的字段。
我想我可以通过执行2次查询来实现它(或者)通过与2个单独查询的结果进行联合。
在我的实时场景中,我有多个表连接这3个表。重做所有其他表的连接,仅针对上述场景是昂贵的..
对此的任何帮助将不胜感激。
答案 0 :(得分:3)
只需使用左连接并为您的连接应用合适的过滤器,如下所示:
SELECT CategoryId, COALESCE(A1_Items.Name, A2_Items.Name) AS Name
FROM CategorizedItems
LEFT JOIN A1_Items ON A1_Items.itemid = CategorizedItems.linkid AND CategorizedItems.type = 'a1'
LEFT JOIN A2_Items ON A2_Items.itemid = CategorizedItems.linkid AND CategorizedItems.type = 'a2'
<强> Fiddle Demo 强>
答案 1 :(得分:2)
另一种方法:
select CategoryID, Name
from CategorizedItems c
join (select 'a1' as table, ItemId, Name from A1_Items
union
select 'a2' as table, ItemId, Name from A2_Items) a
on c.linkId = a.ItemId and c.type = a.table
答案 2 :(得分:1)
尝试这个
SELECT CategoryId, isnull(A1_Items.Name, A2_Items.Name) AS Name FROM CategorizedItems LEFT JOIN A1_Items ON A1_Items.itemid = CategorizedItems.linkid AND CategorizedItems.type = 'a1' LEFT JOIN A2_Items ON A2_Items.itemid = CategorizedItems.linkid AND CategorizedItems.type ='a2'