我正在试图将现有的数据库和系统调整为我们从制造商那里接收到的数据。但它的格式不能/不会更改。这是一个表格,其中包含来自单个制造商的产品编号(item_id),这些产品编号跨越多个制造商的零件(oem_code)。
表格名称:xref
表格名称:xref
item_id | oem_code
A | 123
A | 234
B | 234
B | 345
C | 456
数据表:零件(只显示相关部分号列)
partNum
S.A
S.B
S.C
123
234
345
456
两个xref列都包含零件表中的零件号。我需要输入一个零件号($fielddata)
,然后检索出所有从parts表中匹配parts.partNum = $fielddata
的数据,以及与parts.partNum
相匹配的所有xref的交叉参考编号。不幸的是,制造商的零件号在我们的系统中有S
,但在他们发送的表格中没有S
,我们的系统将无法识别它们。
MySQL查询为
SELECT *
FROM parts
WHERE partNum
IN (
SELECT oem_code
FROM xref
WHERE item_id = (
SELECT item_id
FROM xref
WHERE oem_code = '$fielddata'
)
)
123
返回所有符合 parts.partNum = 123 的部件数据,234(还需要 S.A)
234
出错:#1242 - 子查询返回多行 (需要 234、S.A 和 S.B)
A
没有返回结果 (需要 123、234 和 S.A)
S.A
也没有返回结果 (需要 123、234 和 S.A)
我理解我的 SQL 语句和子查询的限制以及为什么无法得到完整的结果集,但我不知道如何扩展它以获得所需的结果。我很高兴能够用它做到这一步。当我尝试扩展它时,我会得到不想要的结果或错误,所以我基本上已经达到了我的能力极限。
我也知道,在大型数据库上运行子查询并不高效。因此,我可以对 SQL 进行全面重写或修改我目前的代码。如果有人关心,xref 表有 >27k
行记录,而 parts 表有 >550k
行记录,共 10 列。
任何帮助都将不胜感激。