Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接2个sql查询并连接结果?_Sql_Sql Server 2008 - Fatal编程技术网

连接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,请使用完全外部联接。我想我用了太长时间,但这可以通过第一个查询并基本上只添加一行来大大简化…我想我用了太长时间,但通过第一个查询并基本上只添加一行可以大大简化。。。