将第一个 SQL 选择语句结果用于第二个选择语句

Posted

技术标签:

【中文标题】将第一个 SQL 选择语句结果用于第二个选择语句【英文标题】:Using 1st SQL select statement results for 2nd select statement 【发布时间】:2021-08-04 07:59:30 【问题描述】:

我需要一些帮助,将多个 SQL 查询合并为一个...

我有一个用于 orderid 或 sampleref 的搜索框。一个订单最多可能有 99 个 sampleref,因此我希望客户能够提取与其订单号相关联的所有 sampleref 的列表,无论他们是通过 orderid 还是其中一个 sampleref 进行搜索。基本上我想做的是,

SELECT `orderid` as OrderNumber FROM `results` WHERE `sampleref` = 'TEST12345';
SELECT * FROM `results` WHERE `orderid` = OrderNumber GROUP BY `sampleref`;

为清楚起见,我将其放入 Maria DB mysql 服务器的 php 脚本中

这是一个示例数据库

+----+---------+-----------+
| id | orderid | sampleref |
+----+---------+-----------+
|  1 |  101388 | TEST12345 |
|  2 |  101388 | TEST54321 |
|  3 |  333444 | ABC123    |
|  4 |  333444 | ABC321    |
+----+---------+-----------+

谢谢

亨利

【问题讨论】:

为清楚起见,请参阅meta.***.com/questions/333952/… SET Order_Number as OrderNumber 不是有效的 SQL 查询。你能解释一下你的第二个“查询”应该做什么吗? 我已经用我的工作更新了我的 SQL 查询,就你所见,我想将从第一个返回的订单号传递到第二个查询中,尽管我认为这可能可以写成单个查询也 第二次查询(更新后),SELECT *GROUP BY sampleref 不兼容。你在那里做GROUP BY的原因是什么? 减少任何重复的结果。我从 PHPmyadmin 得到的错误是 OrderNunber 是一个未知列 【参考方案1】:

以下内容将为您提供所需的内容。

select r2.orderid, r2.sampleref 
from result r 
join result r2 on r.orderid = r2.orderid 
where r.sampleref = 'TEST12345' or r.orderid = <orderid>

【讨论】:

对其工作原理的一些解释可能有助于 OP(和其他人)理解解决方案。 @Gro nice 但是如果用户使用订单号进行搜索,这对我没有帮助...... @HenryAspden 只需在 orderid 的 where 子句中添加一个 OR 谓词。修改了查询。【参考方案2】:

您可以将or 与相关子查询一起使用:

SELECT r.*
FROM results r
WHERE r.orderid = $orderid OR
      EXISTS (SELECT 1
              FROM results r2
              WHERE r2.orderid = r.orderid AND r2.sampleref = $sampleref
             );

注意:这需要两个参数——订单 ID 或样品参考。第一个条件返回具有相同顺序的所有内容(如果已给出)。第二个返回与给定示例参考具有相同顺序的所有内容。

【讨论】:

以上是关于将第一个 SQL 选择语句结果用于第二个选择语句的主要内容,如果未能解决你的问题,请参考以下文章

使用 Oracle 子选择替换 CASE 语句

存储过程返回2个结果数据集 - 有没有办法只将第一个数据集插入变量但仍然显示第二个?

SQL语句怎么同时往两个表中插入不同的记录

minus指令最后有;吗

SQL中MINUS的用法与UNION的用法

选择第二条到第四条的sql语句怎么写?