gpt4 book ai didi

mysql - 选择多个表中 EACH 2 个表之间共有的所有值

转载 作者:行者123 更新时间:2023-11-29 12:31:36 25 4
gpt4 key购买 nike

我被困在这里...我有 6 个相同格式的表格:sku价格库存.
我无法找出一个查询来获取至少 2 个表共有的所有结果(基于 sku 作为 PK),然后应用规则:获取库存>0 的最小价格,或者如果所有库存=0 则取最小价格。

LE: 假设 t1 和 t2 有一些共同的记录,t2 和 t6 有一些共同的记录,我想要的是收集所有这些结果,然后按上面的规则过滤它们。我已经构建了一个 PHP 脚本来应对上述情况,但在高度索引的数据库上大约需要 10 秒。我们在这里讨论的是分布在不同表上的 50.000 条记录和一个相当强大的 VPS...我的 PHP 脚本需要大约 250MB 的 RAM 和大约 10 秒才能完成。问题是,如果服务器上的流量很大,脚本就会失败并返回 500 服务器错误。我需要加快速度,并且我认为我必须重新设计查询以节省资源。

非常感谢您的任何想法!

最佳答案

使用union all将表组合在一起,然后聚合:

select sku,
(case when sum(stock > 0) > 0
then min(case when stock > 0 then price end)
else min(price)
end) as price
from (select sku, price, stock, 'table1' as which from table1 union all
select sku, price, stock, 'table2' as which from table2 union all
select sku, price, stock, 'table3' as which from table3 union all
select sku, price, stock, 'table4' as which from table4 union all
select sku, price, stock, 'table5' as which from table5 union all
select sku, price, stock, 'table6' as which from table6
) t
group by sku
having count(distinct which) >= 2

价格的“奇特”逻辑应该实现您问题中的逻辑。

编辑:

如果您想要最低价格的库存,我认为以下操作可以做到这一点:

select sku,
(case when sum(stock > 0) > 0
then min(case when stock > 0 then price end)
else min(price)
end) as price,
substring_index(group_concat(stock order by (stock > 0) desc, price), ',', 1) as stock

关于mysql - 选择多个表中 EACH 2 个表之间共有的所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408874/

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