将第一个 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 选择语句结果用于第二个选择语句的主要内容,如果未能解决你的问题,请参考以下文章