mysql - 如何为多个连接编写子查询 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”表加入/查询。
因此,这是加入一个表以获取多行本身。
我如何使用子查询和/或加入来编写这个?
解决方案
类似下面的查询应该采用您的第一个查询(不计)并将其用作子查询,该子查询通过 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
),这有时更容易推理。
推荐阅读
- node.js - 无法加载或刷新具有动态 ID 的路由
- android - 查询 Realm 类子对象的大小 - Kotlin
- javascript - 从 HTMLVideoElement 更新 WebAssembly 中的 WebGL 纹理
- sql - 统计sql查询
- php - 以编程方式更改 WooCommerce 数量而不重新计算购物车总数
- jenkins - 如何在 Jenkins 脚本化管道中设置环境变量?
- javascript - 使用 Node 的 http 模块提供 angular.min.js
- java - 如何通过 url 路径变量解析环境?
- rspec - RSpec中的'it'和'example'有什么区别?
- c# - GCM - Android 推送通知 - MismatchSenderId 错误