假设有零件表。 我首先选择带有查询的 Part 表,它返回 500 行。 在distinct(partid)之后,我只得到100。
block 引用>select count(distinct partid) from Part where partname iLike 'ABC%';
现在,我需要循环partid (uniq),并查询“PartAlt”表以获取“alternatepartid”。这张 table 有“partid”,所以我可以加入。
对于每个循环,我会得到 10 个左右,但我只需要这些行中的“alternatepartid”。
block 引用>select alternatepartid from PartAlt where mpnid = xxx So, at the end of loop, I will have 1000 alternatepartid.
现在,对于这些结果的每个循环,我采用alternatepartid 并与上面的第一个“Part”表连接/查询。
因此,这是连接一个表以获取其本身的多行。
如何使用子查询和/或联接来编写此内容?
最佳答案
类似下面的查询应该采用您的第一个查询(没有计数)并将其用作使用partid列连接到另一个表的子查询:
select PartAlt.alternatepartid from
(select distinct partid from Part
where partname iLike 'ABC%') as uniq_parts
join Part as PartAlt on uniq_parts.partid = PartAlt.mpinid;
您还可以使用 cte(with .. as
),有时更容易推理。
关于mysql - 如何为多个连接编写子查询sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59676508/