gpt4 book ai didi

mysql - SQL 返回一组合并的结果

转载 作者:行者123 更新时间:2023-11-29 01:23:27 24 4
gpt4 key购买 nike

我有以下 SQL:

SELECT `table1`.`value`, `table2`.* 
FROM `table2`
INNER JOIN `table1` ON `table2`.`product_id` = `table1`.`entity_id`
WHERE `table2`.`created_at` > '2012-04-23' and
(`table1`.`value` = 264 OR `table1`.`value` = 260)
order by order_id

它返回的结果集是这样的(这只是返回结果的一部分):

value  order_id   ...
260 1234
260 1235
260 1236
264 1236
260 1237
260 1238
260 1239
264 1239
264 1240
260 1241

我想要的是一个查询,它将获取这些结果并仅返回 order_id 包含值 260 和 264 的订单。基于此示例,我要查找的最终结果是

260   1236
264 1236
260 1239
264 1239

我的想法是这可以用一个子集来完成,但我不确定完成它的细节。

最佳答案

这可以通过 relational division 来完成:

select r.order_id from (
select
dividend.*
from your_table_or_query as dividend -- assumes no duplicates in `dividend`; use `distinct` if there are any
inner join divisor
on dividend.value = divisor.value
) as r
group by r.order_id
having count(*) = (select count(*) from divisor);

结果:

+----------+
| order_id |
+----------+
| 1236 |
| 1239 |
+----------+
2 rows in set (0.00 sec)

您的查询是 your_table_or_query

select 260 as value from dual union select 264 as value from dual

除数

这将返回订单 ID 1236 和 1239;然后可以将它们加入原始查询以获取具有这些订单 ID 的所有行(如果这是您想要的)。


带有插入语句的完整查询:

create table divisor (value int);
insert into divisor values (260), (264);

create table your_table_or_query (value int, order_id int);
insert into your_table_or_query values (260, 1234), (260, 1235), (260, 1236), (264, 1236), (260, 1237), (260, 1238), (260, 1239), (264, 1239), (264, 1240), (260, 1241);


select y.* from (
select r.order_id from (
select
dividend.*
from your_table_or_query as dividend
inner join divisor
on dividend.value = divisor.value
) as r
group by r.order_id
having count(*) = (select count(*) from divisor)
) as quotient
inner join your_table_or_query y
on quotient.order_id = y.order_id;

结果:

+-------+----------+
| value | order_id |
+-------+----------+
| 260 | 1236 |
| 264 | 1236 |
| 260 | 1239 |
| 264 | 1239 |
+-------+----------+
4 rows in set (0.00 sec)

关于mysql - SQL 返回一组合并的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10485971/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com