我目前的状况:
表1装箱单:
CREATE TABLE `PackingList` (
`PackingListId` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Sku` char(10) NOT NULL DEFAULT '',
`PartId1` int(8) unsigned NOT NULL,
`PartId2` int(8) unsigned DEFAULT NULL,
`PartId3` int(8) unsigned DEFAULT NULL,
`PartId4` int(8) unsigned DEFAULT NULL,
`PartId5` int(8) unsigned DEFAULT NULL,
`PartId6` int(8) unsigned DEFAULT NULL,
`PartId7` int(8) unsigned DEFAULT NULL,
`PartId8` int(8) unsigned DEFAULT NULL,
`PartId9` int(8) unsigned DEFAULT NULL,
`PartId10` int(8) unsigned DEFAULT NULL,
PRIMARY KEY (`PackingListId`),
KEY `PartId1 <-> PLC_PartId[PartId]` (`PartId1`),
KEY `PartId2 <-> PLC_PartId[PartId]` (`PartId2`),
KEY `PartId3 <-> PLC_PartId[PartId]` (`PartId3`),
KEY `PartId4 <-> PLC_PartId[PartId]` (`PartId4`),
KEY `PartId5 <-> PLC_PartId[PartId]` (`PartId5`),
KEY `PartId6 <-> PLC_PartId[PartId]` (`PartId6`),
KEY `PartId7 <-> PLC_PartId[PartId]` (`PartId7`),
KEY `PartId8 <-> PLC_PartId[PartId]` (`PartId8`),
KEY `PartId9 <-> PLC_PartId[PartId]` (`PartId9`),
KEY `PartId10 <-> PLC_PartId[PartId]` (`PartId10`),
);
表2(PartId):
CREATE TABLE `PartId` (
`PartSkuId` int(8) unsigned zerofill NOT NULL AUTO_INCREMENT,
`Content` varchar(255) DEFAULT NULL,
`Height` decimal(7,2) unsigned NOT NULL,
`Width` decimal(7,2) unsigned NOT NULL,
`Depth` decimal(7,2) unsigned NOT NULL,
`Weight` decimal(7,3) unsigned NOT NULL,
`Supplier` varchar(100) NOT NULL DEFAULT '',
`Created` datetime DEFAULT NULL,
`CreatedBy` varchar(20) DEFAULT NULL,
`InUse` tinyint(1) DEFAULT '1',
`FF_Confirmed` datetime DEFAULT NULL,
PRIMARY KEY (`PartSkuId`),
KEY `Supplier` (`Supplier`)
) ENGINE=InnoDB AUTO_INCREMENT=6698 DEFAULT CHARSET=utf8;
考虑到我有两个表,其中PackingList表的每一行都包含多个ID,这些ID引用PartId表中的一行,我想得到类似PackingList的列表,其中每一行都是一个关系PackingList (可以重复)-> partId:
PackingListId PartId
H0001 partId1
H0001 . partId2
以此类推。
到目前为止,我做了一些选择来将这些信息汇总在一起,但是我没有做到那么远,有人可以帮我写出这样的结果吗?
答案 0 :(得分:0)
使用类似的子查询
SELECT T1_Id,(SELECT T2_Id FROM Table2)作为T2_Id,(SELECT C1 FROM Table2)作为C1,(SELECT C2 FROM TAble2)作为C2,(SELECT C3 FROM TAble2)作为C3 FROM Table1
答案 1 :(得分:0)
专业提示1 :弄清楚SQL查询(或实际上任何程序)必须做什么的时间越长,花费的时间就越少。
这是猜测。在您编辑问题之前,我正在回答您的问题。但是我相信你想要这样的东西
这将使您获得t1.p1中提到的t2中的值。
SELECT t1.T1_Id, t2.T2_Id, t2.c1, t2.c2, t2.c3
FROM T1
LEFT JOIN T2 ON T1.p1 = T2_Id
然后,您需要弄乱这些子查询,每个p*
项目一个。您将合并这些子查询。
SELECT T1_Id, T2_Id, c1, c2, c3
FROM
SELECT t1.T1_Id, t2.T2_Id, t2.c1, t2.c2, t2.c3
FROM T1
LEFT JOIN T2 ON T1.p1 = T2_Id
UNION
SELECT t1.T1_Id, t2.T2_Id, t2.c1, t2.c2, t2.c3
FROM T1
LEFT JOIN T2 ON T1.p2 = T2_Id
UNION
SELECT t1.T1_Id, t2.T2_Id, t2.c1, t2.c2, t2.c3
FROM T1
LEFT JOIN T2 ON T1.p3 = T2_Id
ORDER BY T1_Id, T2_Id
专业提示2 :这比您所需的难度更大,因为您的t1表已被非规范化。在您的应用程序中进行更改可能为时已晚,但是无论如何您都应该阅读它。