连接2个sql查询并连接结果?
我有两个查询,几乎可以提供我需要的数据:连接2个sql查询并连接结果?,sql,sql-server-2008,Sql,Sql Server 2008,我有两个查询,几乎可以提供我需要的数据: SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID FROM ModifierLists INNER JOIN ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.Modif
SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Size'
ORDER BY Products.ItemID
SELECT Products.ItemID, ModifierListItems.ItemID AS ColorItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
ORDER BY Products.ItemID
我要寻找的最后一个输出是SizeItemID,它与ItemID上连接的ColorItemID连接在一起
两个查询的示例结果:
ItemID SizeItemID
------- ----------
A A-S
A A-M
B B-M
B B-L
ItemID ColorItemID
------- -----------
A BLK
A WHT
B BLK
B WHT
B GRN
我期待的结果如下:
FinalItemID
-----------
A-S-BLK
A-S-WHT
A-M-BLK
A-M-WHT
B-M-BLK
B-M-WHT
B-M-GRN
B-L-BLK
B-L-WHT
B-L-GRN
试试这个:
您只需要将这两个查询作为派生表,并在ItemID上进行连接
Select a.SizeItemID+'-'+b.ColorItemID as FinalItemID
FROM
(SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Size'
)a
JOIN
(SELECT Products.ItemID, ModifierListItems.ItemID AS ColorItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
)b
on a.ItemID=b.ItemID
ORDER BY a.FinalItemID
试试这个:
您只需要将这两个查询作为派生表,并在ItemID上进行连接
Select a.SizeItemID+'-'+b.ColorItemID as FinalItemID
FROM
(SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Size'
)a
JOIN
(SELECT Products.ItemID, ModifierListItems.ItemID AS ColorItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
)b
on a.ItemID=b.ItemID
ORDER BY a.FinalItemID
您可以接受两个查询并在ItemId上将它们连接在一起以构造最终值 在下面的查询中,我还在表名上使用别名。许多人发现有意义的别名比长表名更容易阅读:
with tsize as (
SELECT p.ItemID,
p.ItemID + '-' + mli.ItemID AS SizeItemID
FROM ModifierLists ml INNER JOIN
ProductModifierLists pml
ON ml.ModifierListID = pml.ModifierListID INNER JOIN
ModifierListItems mli
ON ml.ModifierListID = mli.ModifierListID INNER JOIN
Products p
ON pml.ItemID = Products.ItemID AND
pml.ManufacturerID = p.ManufacturerID
WHERE (p.ManufacturerID = 262) AND ModifierListName='Size'
),
tcolor as (
SELECT p.ItemID, mli.ItemID AS ColorItemID
FROM ModifierLists moli INNER JOIN
ProductModifierLists pml
ON ml.ModifierListID = pml.ModifierListID INNER JOIN
ModifierListItems mli
ON ml.ModifierListID = mli.ModifierListID INNER JOIN
Products p
ON pml.ItemID = Products.ItemID AND
pml.ManufacturerID = p.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
)
select SizeItemID+'-'+ColorItemID
from tsize join tcolor
on tsize.itemid = tcolor.ItemID
您可以接受两个查询并在ItemId上将它们连接在一起以构造最终值 在下面的查询中,我还在表名上使用别名。许多人发现有意义的别名比长表名更容易阅读:
with tsize as (
SELECT p.ItemID,
p.ItemID + '-' + mli.ItemID AS SizeItemID
FROM ModifierLists ml INNER JOIN
ProductModifierLists pml
ON ml.ModifierListID = pml.ModifierListID INNER JOIN
ModifierListItems mli
ON ml.ModifierListID = mli.ModifierListID INNER JOIN
Products p
ON pml.ItemID = Products.ItemID AND
pml.ManufacturerID = p.ManufacturerID
WHERE (p.ManufacturerID = 262) AND ModifierListName='Size'
),
tcolor as (
SELECT p.ItemID, mli.ItemID AS ColorItemID
FROM ModifierLists moli INNER JOIN
ProductModifierLists pml
ON ml.ModifierListID = pml.ModifierListID INNER JOIN
ModifierListItems mli
ON ml.ModifierListID = mli.ModifierListID INNER JOIN
Products p
ON pml.ItemID = Products.ItemID AND
pml.ManufacturerID = p.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
)
select SizeItemID+'-'+ColorItemID
from tsize join tcolor
on tsize.itemid = tcolor.ItemID
看起来最干净的方法是将每个查询放到它自己的视图中。它还可以帮助你更好地理解你正在做的事情。因此,如果我们进行查询并创建视图:
CREATE VIEW v_ProductSize
AS
SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Size'
ORDER BY Products.ItemID
CREATE VIEW v_ProductColor
AS
SELECT Products.ItemID, ModifierListItems.ItemID AS ColorItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
ORDER BY Products.ItemID
然后你有两个简单的视图可以正常使用,对吗?所以你的问题是:
选择ps.SizeItemID+'-'+pc.ColorItemID
来自v_ProductSize ps
在ps.ItemID=pc.ItemID上加入v_ProductColor pc
看到了吗?你只是在做一个普通的连接,就像其他任何表一样。现在,假设您不想创建视图,或者由于某些原因没有权限。您可以跳过视图零件本身,使用子查询。您只是将对视图的引用替换为括号中的查询本身
所以看起来是这样的:
SELECT ps.SizeItemID + '-' + pc.ColorItemID
FROM (
SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Size'
ORDER BY Products.ItemID
) ps
JOIN
( SELECT Products.ItemID, ModifierListItems.ItemID AS ColorItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
ORDER BY Products.ItemID
) pc ON ps.itemID=pc.ItemID
现在。。。综上所述,我的咖啡终于开始了,您可以通过一行修改将查询简化为一行:
SELECT Products.ItemID, Products.ItemID + '-' + colors.ItemID + '-' + sizes.ItemID AS SizeColorItemID
FROM ModifierLists
INNER JOIN ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID
INNER JOIN ModifierListItems sizes ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID
--Put modifier list name in join clause
AND ModifierListName='Size'
INNER JOIN ModifierListItems colors ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID
--same here, but for color
AND ModifierListName = 'Color'
INNER JOIN Products ON ProductModifierLists.ItemID = Products.ItemID
AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) --Remove modifierlistitem here so you can use it in the join clauses
ORDER BY Products.ItemID
因此,由于我们在两个原始查询中提取相同的信息,只有一个不同的条件。。。我们可以将modifierlistitem.name移动到join子句中,然后使用不同的条件再次连接到同一个表。然后我们根据使用大小、颜色的条件对表进行别名。这样,您就可以引用别名并提取正确的条目id,然后一次将它们全部连接起来。好的,最干净的方法是将每个查询放到它自己的视图中。它还可以帮助你更好地理解你正在做的事情。因此,如果我们进行查询并创建视图:
CREATE VIEW v_ProductSize
AS
SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Size'
ORDER BY Products.ItemID
CREATE VIEW v_ProductColor
AS
SELECT Products.ItemID, ModifierListItems.ItemID AS ColorItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
ORDER BY Products.ItemID
然后你有两个简单的视图可以正常使用,对吗?所以你的问题是:
选择ps.SizeItemID+'-'+pc.ColorItemID
来自v_ProductSize ps
在ps.ItemID=pc.ItemID上加入v_ProductColor pc
看到了吗?你只是在做一个普通的连接,就像其他任何表一样。现在,假设您不想创建视图,或者由于某些原因没有权限。您可以跳过视图零件本身,使用子查询。您只是将对视图的引用替换为括号中的查询本身
所以看起来是这样的:
SELECT ps.SizeItemID + '-' + pc.ColorItemID
FROM (
SELECT Products.ItemID, Products.ItemID + '-' + ModifierListItems.ItemID AS SizeItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Size'
ORDER BY Products.ItemID
) ps
JOIN
( SELECT Products.ItemID, ModifierListItems.ItemID AS ColorItemID
FROM ModifierLists INNER JOIN
ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID INNER JOIN
ModifierListItems ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID INNER JOIN
Products ON ProductModifierLists.ItemID = Products.ItemID AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) AND ModifierListName='Color'
ORDER BY Products.ItemID
) pc ON ps.itemID=pc.ItemID
现在。。。综上所述,我的咖啡终于开始了,您可以通过一行修改将查询简化为一行:
SELECT Products.ItemID, Products.ItemID + '-' + colors.ItemID + '-' + sizes.ItemID AS SizeColorItemID
FROM ModifierLists
INNER JOIN ProductModifierLists ON ModifierLists.ModifierListID = ProductModifierLists.ModifierListID
INNER JOIN ModifierListItems sizes ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID
--Put modifier list name in join clause
AND ModifierListName='Size'
INNER JOIN ModifierListItems colors ON ModifierLists.ModifierListID = ModifierListItems.ModifierListID
--same here, but for color
AND ModifierListName = 'Color'
INNER JOIN Products ON ProductModifierLists.ItemID = Products.ItemID
AND ProductModifierLists.ManufacturerID = Products.ManufacturerID
WHERE (Products.ManufacturerID = 262) --Remove modifierlistitem here so you can use it in the join clauses
ORDER BY Products.ItemID
因此,由于我们在两个原始查询中提取相同的信息,只有一个不同的条件。。。我们可以将modifierlistitem.name移动到join子句中,然后使用不同的条件再次连接到同一个表。然后我们根据使用大小、颜色的条件对表进行别名。这样,您只需引用别名并提取正确的项id,然后一次将它们连接起来。将这两个查询作为项id上的派生表连接起来。如果其中一个查询包含在另一个查询中找不到的id,请使用完全外部联接。将这两个查询作为ItemID上的派生表联接。如果其中一个查询包含在另一个查询中找不到的id,请使用完全外部联接。我想我用了太长时间,但这可以通过第一个查询并基本上只添加一行来大大简化…我想我用了太长时间,但通过第一个查询并基本上只添加一行可以大大简化。。。