[英]SQL Server Inner Join on same column with two tables
我正在考虑对以下3个表进行内部联接的可能性。
分类项目
CategoryId | linkid | type
------------------------------
1 1 a1
1 2 a1
1 1 a2
A1_物品
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中没有任何表示“类型”的字段。
我想我可以通过执行2个查询(或)通过对2个独立查询的结果进行并集来实现。
在我的实时场景中,我有多个与这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'
另一种方法:
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
试试这个
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'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.