mysql - 如何为多个连接编写子查询sql

标签 mysql sql postgresql join

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

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

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

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

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/

相关文章:

php - 如何从 MYSQL 结果集中获得 2 行的复杂总和?

algorithm - 如何找到 PostgreSQL 存储删除算法?

php - MySQL 'Group By' 搞乱虚拟列计数

MySQL/按日期对数据进行排序和分组

mysql - 选择不在started_date和stopped_date之间的updated_dates

php - 检查行是否存在,Laravel

ruby-on-rails - 在开发环境中通过 Octopus gem 复制 Rails Postgresql

postgresql - 多边形区域 Postgres

android - 如何使用本地 MySQL 数据库构建 Android 应用程序?

mysql - mysql时间查询错误