gpt4 book ai didi

mysql - 循环处理查询中的每一行

转载 作者:行者123 更新时间:2023-11-29 09:51:41 29 4
gpt4 key购买 nike

有两个表:

表 1:我的书

BOOK     PRICE
book1 45
book2 21
book3 7
book4 95
book5 32
etc

表 2:不是我的书

OWNER     BOOK     PRICE
owner1 book1 32
owner2 book1 14
owner2 book2 3
owner3 book3 7
owner4 book4 3
etc

因此,在表 1 中,我们只有一本书 1,只有一本书 2,等等。在表 2 中,我们可以有一本或多本书 1,或者书 2 等。

我想知道我的书(表 1)和非我的书(表 2)之间的最低价格差异。 (这个订单很重要,即使我获得负值也没关系)。

换句话说,我想做这样的事情:

price (of books1 from table1) - price (of books1 from table2)

鉴于表2中的书籍1可以有很多价格,我必须这样做

price (of book1 from table1) - price1 (of book1 from table2)
price (of book1 from table1) - price2 (of book1 from table2)
….

然后,选择获得的结果之间的最小值。

我当前查询的逻辑是:

SELECT
table1.price - table2.price
FROM
table1
JOIN table2 ON table1.book = table2.book

但它不起作用,因为它返回多于 1 行(对于 table2)。

所以我的问题是:我是否必须使用循环(光标???我可以在这里使用它吗?)还是有其他方法可以做到这一点?

非常感谢您的建议!

编辑

我试过了

SELECT
min(table1.price - table2.price) AS ‘price difference’
FROM
table1
JOIN table2 ON table1.book = table2.book

这不起作用。

预期结果:

BOOK    PRICE DIFFERENCE
book1 13
book2 18
book3 0
etc

最佳答案

我认为您需要这个查询,但如果没有预期的结果,很难确定。
CASE END是否可以使用 (my_books.PRICE - not_my_books.PRICE) * -1 使结果始终为正如果books.PRICE - not_my_books.PRICE是一个负数。
我知道MySQL支持ABS()执行相同的操作,但此查询是 ANSI SQL,因此它适用于大多数数据库系统。

查询

SELECT 
my_books.BOOK
, MIN(
CASE
WHEN my_books.PRICE - not_my_books.PRICE < 0
THEN (my_books.PRICE - not_my_books.PRICE) * -1
ELSE my_books.PRICE - not_my_books.PRICE
END
) AS price_difference
FROM
my_books
INNER JOIN
not_my_books
ON
my_books.BOOK = not_my_books.BOOK
GROUP BY
my_books.BOOK

结果

| BOOK  | price_difference |
| ----- | ---------------- |
| book1 | 13 |
| book2 | 18 |
| book3 | 0 |
| book4 | 29 |

参见demo

关于mysql - 循环处理查询中的每一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54679897/

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