Mysql 循环处理查询中的每一行

Mysql 循环处理查询中的每一行,mysql,sql,loops,Mysql,Sql,Loops,有两个表格: 表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:我的书

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中的书有很多价格,我不得不这样做

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行(对于表2)

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

非常感谢你的建议

编辑

我试过了

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

尝试使用
min
分组运算符

SELECT my_books.BOOK,
min(abs(table1.price - table2.price))
FROM table1
JOIN table2 ON table1.book = table2.book
group by my_books.BOOK

我认为您需要这个查询,但是如果没有预期的结果,很难说确定
如果
books.PRICE-not\u my\u books.PRICE)*-1
if
books.PRICE-not\u my\u books.PRICE,则
CASE END
用于使结果始终为正
我知道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

请参见

您还应提供预期结果。。请看我的答案,我发布给你的编辑将给你那些预期的结果。问题是什么?你能详细解释一下吗?问题是什么?这只会给出一条没有
按表分组的记录1.BOOK
子句,这很可能是问题所在..是的,我的坏:)@user198493您能再次检查我的解决方案吗?
| BOOK  | price_difference |
| ----- | ---------------- |
| book1 | 13               |
| book2 | 18               |
| book3 | 0                |
| book4 | 29               |