将具有2个where子句的3个表连接起来获得空结果

拉瓦特123

我在从sql查询中获取结果时遇到问题。我需要两个where子句的结果。我使用SQLServer2014

表1:产品

ProductID
1
2
3
4
5

表2:供应商

SupplierID
1
2
3

表3:Product_Supplier

ProductSupplierID|ProductID|SupplierID|Reference
1                |1        |1         |Ref001
2                |1        |2         |Ref002
3                |2        |1         |Ref003
4                |3        |2         |Ref004
5                |4        |2         |Ref005

我想要的结果是当我设置时:

其中(ProductID <4)和(SupplierID = 2)

我必须得到结果:ProductID 4下与SupplierID 2相关的所有产品,如果Product_Supplier中不存在此产品,则我必须获得Reference = Null

ProductID|SupplierID|Reference
1        |2         |Ref002
2        |2         |Null
3        |2         |Ref004

我启动了一些sql脚本,但无法获得正确的结果

select a.ProductID, b.SupplierID, C.Reference from Product as a
  left outer join Product_Supplier as c on c.ProductID= a.ProductID
  left outer join Supplier as B on b.SupplierID = c.SupplierID
where a.ProductID<4 and b.SupplierID=2

Felix Pamittan的回答:

SELECT
    t.*,
    ps.Reference
FROM (
    SELECT *
    FROM Product 
    CROSS JOIN Supplier
    WHERE
        ProductID < t.ProductID
        AND SupplierID = t.SupplierID
) t
LEFT JOIN Product_Supplier ps
    ON ps.ProductID = t.ProductID
    AND ps.SupplierID = t.SupplierID

在此脚本上,我无法注入添加运行时的where代码。当我可以在sql的末尾设置where时,最终用户可以注入where参数。

SELECT
    t.*,
    ps.Reference
FROM (
    SELECT *
    FROM Product 
    CROSS JOIN Supplier
    --WHERE
    --    ProductID < t.ProductID
    --    AND SupplierID = t.SupplierID
) t
LEFT JOIN Product_Supplier ps
    ON ps.ProductID = t.ProductID
    AND ps.SupplierID = t.SupplierID
where t.ProductID < 4
and t.SupplierID=2

我将在实际数据库中最后测试一次。

菲利克斯·帕米坦(Felix Pamittan)

您需要首先获取Products和Suppliers的所有组合通过执行此操作CROSS JOIN最后,LEFT JOINProduct_Supplier桌子做一个

SELECT
    t.*,
    ps.Reference
FROM (
    SELECT *
    FROM #Product 
    CROSS JOIN #Supplier
    WHERE
        ProductID < 4
        AND SupplieIrD = 2
) t
LEFT JOIN #Product_Supplier ps
    ON ps.ProductID = t.ProductID
    AND ps.SupplierID = t.SupplieIrD

ONLINE DEMO

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用CodeIginter将两个带有where子句的表连接起来

将具有行和列的两个表连接起来并求和

将具有多个值成分的两个RDD连接起来并展平结果

将2个div与一个具有透视图的框连接起来

使用Python Pandas将两个具有范围条件的表连接起来

将 3 个表与其他表中的多个值连接起来

数据框将两个表与现有数据连接起来

通过Matlab中的“ ID”字段将具有相同字段名的2个结构连接起来

Postgresql 将 2 个表与公里范围连接起来

使用条件条件LINQ将2个数据表连接起来

Codeigniter将2个表数据与带有ID值的新列连接起来

根据一个单独的表(在EG中)的观察结果将两个表连接起来?

将表与子查询结果连接起来

将具有相同模式但具有多个优先级的两个文件连接起来

将一个表与其他 2 个可能有也可能没有相关行的表连接起来

Python / Pandas:将两个具有多重索引的数据框连接起来

Django查询:将具有两个字段的两个模型连接起来

ffmpeg:如何将两个具有任意参数的视频连接起来?

如何将3个表与Laravel的雄辩关系和Eager Loading连接起来?

使用Play Framework和JPA将两个表连接起来

Keras:如何将2个张量与动态形状连接起来?

Python:将 2 个数组与 1 个空数组连接起来

将表中的所有数据与其他表中可能不存在的 where 子句连接起来

将两个不同的表与公共列上的公共第三个表连接起来

将两个表与另一个表的多个条目的列连接起来

将一个查询的结果与另一个查询连接起来

将表自身连接起来,找到一个接一个地购买的产品

如何将codeigniter中的两个表与jquery数据表连接起来

如何将列名完全相同的两个表与具有唯一列名的第三个表连接起来以创建新视图?