gpt4 book ai didi

mysql - SELECT - 过滤掉符合条件的结果

转载 作者:行者123 更新时间:2023-11-29 16:21:04 25 4
gpt4 key购买 nike

我有两个关系表。我想根据它们制定一个 SELECT 查询,用于检索列中“介于”值之间的项目。

我是 MySQL 新手,这种查询不是我的强项。我确信我从错误的角度看待问题。希望我能从这里站稳脚跟!

好的,这里是:我有两个表:productsline_items,其中 product_id 是第一个表的主键,其值为 1与后者中的匹配字段有很多关系。这些表包含以下列:

产品

product_id

line_items

product_id
timestamp_out
timestamp_in

时间戳指示产品何时从库存中取出(出)以及何时重新放入库存(入)。相同的product_id可以在line_items中出现多次,并且timestamp_out始终小于timestamp_in

我想做的是在产品未“ checkout ”时检索product_id

例如product_id 1,line_items 中可能有以下行:

第一行

-timestamp_out: 1
-timestamp_in: 3

第二行

-timestamp_out: 6
-timestamp_in: 7

我想要实现的是一个查询,该查询将采用两个任意时间戳并返回在这些时间戳之间未 checkout 的产品(例如,如果查询中的时间戳为 out: 4 和 in: 6,那么不应返回product_id 1,因为该跨度的上限频谱与第二行的时间跨度交叉;仅当查询中的时间戳为 out: 4 和 in: 5 或以上时7 应返回product_id 1)。

我尝试了几种查询变体,但我认为“最接近”的一个是:

SELECT
products.product_id
FROM
products
INNER JOIN
line_items
ON
(products.product_id = line_items.product_id)
WHERE
6 NOT BETWEEN line_items.timestamp_out AND timestamp_in
OR
4 NOT BETWEEN line_items.timestamp_out AND timestamp_in

这不起作用,因为它返回 product_id 1 来查看第一行的条件是否成立。如果我将其反转为:

WHERE
6 BETWEEN line_items.timestamp_out AND timestamp_in
OR
4 BETWEEN line_items.timestamp_out AND timestamp_in

...这当然也会返回 product_id 1,因为查询中的跨度与第二行的跨度交叉。

希望我能把问题说清楚!我必须承认,在过去的几个小时里我一直在看这个,但又无法集中精力思考如何执行此类 MySQL 查询,这让我感到有点恶心!

最佳答案

我们将定义要查询范围的时间戳称为 query_startquery_end .

line_items 中的时间戳范围行与查询范围重叠,如果 query_end < timestamp_out (查询范围在产品下架前结束)或query_start > timestamp_in (查询范围从产品返回后开始)。

我们正在寻找一种产品,其中所有line_item该产品的行不与范围重叠,或者不存在重叠的行。

select *
from product p
where not exists (
select *
from line_items i
where i.product_id = p.product_id
and not (@query_end < i.timestamp_out or @query_start > i.timestamp_in)
)

关于mysql - SELECT - 过滤掉符合条件的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54508464/

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