用条件连接五张表的 SQL 查询
Posted
技术标签:
【中文标题】用条件连接五张表的 SQL 查询【英文标题】:SQL query for joining five tables with conditions 【发布时间】:2016-01-16 00:31:01 【问题描述】:我有 5 个表格,如下所示:
Serial_Number|Product_ID|Mfg_ID|Distribution_Type
AG0026 | CKJUT |UGXT03|A
BX3234 | NPLPT |UXXP32|B
LP3269 | KNGTP |AKML63|A
..... ..... ... ..
产品详情2:
Serial_Number|Product_Type|Unit
NG2164 |S |10
LT4598 |L |13
BX3234 |L |21
制造商:
SLNO|Product_Code|Mfg_Code
1 |T03 |T03
2 |L63 |L63
3 |BXT |null
制造细节1:
mfg_code|Mfg_Name
T03 | xy.pvt.ltd
L63 | LP.pvt.ltd
制造细节2:
Sel_ID|Mfg_Name
UXXP32|ab.pvt.ltd
NTLP25|cd.pvt.ltd
现在我需要在需要以下列的地方生成报告
-
序列号
Product_ID
产品类型为 L 的 Mfd_ID
Mfg_Name,其中产品类型为 L
产品类型为 L 的单位
条件:
-
MfgDetails1 的 Product_code= ProductDetails1 的 Mfg_ID 的最后 3 位
MfgDetails2 的 Sel_ID= ProductDetails1 的 Mfg_ID
如果 distribution_type = 'A',则用于制造细节。您需要获取 ProductDetails1 的 mfg_ID 的最后 3 个字符,在 mfgacct 上将其作为 product_code 查找 mfg_code,然后使用该 mfg_code 访问 mfg_name 的 MfgDetails1。
如果 distribution_type = 'B',则获取制造商详细信息。您需要获取 ProductDetails1 的完整 mfg_ID,并将其作为 MfgDetails2 上的 Sel_ID 查找。
所以我的查询:
SELECT
pd1.serial_number AS 'Serial Number',Pd1.product_ID AS 'Product ID',
pd1.mfg_id,
CASE WHEN pd1.distribution_type='A' THEN md1.Mfg_Name
ELSE md2.Mfg_Name
END AS 'MFG Name',
pd1.distribution_type,
pd2.unit
FROM
ProductDetails1 pd1
JOIN
ProductDetails2 pd2 ON pd1.serial_number = pd2.serial_number
JOIN
Mfgaccnt ON Mfgaccnt.Product_Code = Right(Pd1.Mfg_ID,3)
JOIN
MfgDetails1 ON Md1.Mfg_Code = Mfgaccnt.Product_Code
LEFT JOIN
MfgDetails2 md2 ON pd1.mfg_Id = md2.sel_ID
WHERE
pd2.product_type = 'L'
但是 Result 没有返回任何 B 分布类型的产品。请帮帮我
【问题讨论】:
我无法格式化。请帮忙。 欢迎来到 ***:如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击“代码示例”按钮 (
) 在编辑器工具栏上(或将行缩进至少 4 个字符!)以很好地格式化和语法突出显示它!
【参考方案1】:
这不是问题吗:
如果 distribution_type = 'A',则用于制造细节。你需要 取 ProductDetails1 的 mfg_ID 的最后 3 个字符,查一下 作为 mfgacct 上的 product_code 来查找 mfg_code,然后使用它 mfg_code 以访问 mfg_name 的 MfgDetails1。在您的 SQL 中,您也在为其他分发类型执行此操作:
JOIN
Mfgaccnt ON Mfgaccnt.Product_Code = Right(Pd1.Mfg_ID,3)
由于这不是左外连接,它将过滤掉所有没有以这种方式匹配的行。
【讨论】:
以上是关于用条件连接五张表的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
sql查询:使用内连接查询两张表的时候,如果左边表的一条记录对应了右边表的两条记录,结果显示排列问题
mysql啥时候使用子查询,啥时候使用表连接查询,关系多张表的时候该怎么查询