MySql Table 其中每一行都有多个外键指向一个 table

MySql Table where every row has multiple foreign key to one table

我现在的情况:

表 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;

鉴于我有这两个 table,其中 PackingList table 的每一行都包含多个引用 PartId table 中一行的 ID,我想得到类似 PackingList 的列表,其中每一行都是一个关系 PackingList(可以重复)--> partId :

PackingListId PartId
H0001          partId1
H0001 .        partId2

等等。

到目前为止,我做了一些 select 来收集这些信息,但我没有得到那么多,有人可以帮我写一个带有这样结果的查询吗?

像这样使用子查询

SELECT T1_Id,(SELECT T2_Id FROM Table2) as T2_Id, (SELECT C1 FROM Table2) as C1, (SELECT C2 FROM TAble2) 作为 C2,(SELECT C3 FROM TAble2) 作为 C3 FROM Table1

专业提示 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 table 是 非规范化的 。在您的应用程序中更改它可能为时已晚,但无论如何您都应该阅读它。