首页 > 解决方案 > 如何为多个连接编写子查询 sql

问题描述

假设有零件表。我首先选择带查询的零件表,它返回 500 行。在 distinct (partid) 之后,我只得到 100。

select count(distinct partid) from Part where partname iLike 'ABC%';

现在,我需要循环 partid (uniq) 并查询“PartAlt”表以获取“alternatepartid”。这张桌子有'partid',所以我可以加入。

对于每个循环,我会得到 10 个左右,但我只需要这些行中的“alternatepartid”。

从 PartAlt 中选择alternatepartid,其中 mpnid = xxx 因此,在循环结束时,我将有 1000 个 Alternatepartid。

现在,对于这些结果的每个循环,我使用alternatepartid 并使用上面的第一个“Part”表加入/查询。

因此,这是加入一个表以获取多行本身。

我如何使用子查询和/或加入来编写这个?

标签: mysqlsqlpostgresqljoin

解决方案


类似下面的查询应该采用您的第一个查询(不计)并将其用作子查询,该子查询通过 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),这有时更容易推理。


推荐阅读