mysql - 使用 MySQL/MariaDB 比较具有排序和分组行的两个表
问题描述
我想比较两张表,一张是当前订单,另一张是所有订单的历史。
我的目的是查找当前订单是否已存在于历史记录中。为此,我需要验证它们是否具有相同 item
的 ,以相同的 sequence
顺序(不关心确切的数字,只是顺序)对于任何订单number
(将订单分组为块)。在此示例中,current_order
存在于history_order.order
number中2
:
current_order
+----------+------+
| sequence | item |
+----------+------+
| 1 | 11 |
| 2 | 12 |
| 3 | 13 |
+----------+------+
history_orders
+--------+----------+------+
| number | sequence | item |
+--------+----------+------+
| 1 | 1 | 11 | <- matches item 11
| 1 | 2 | 12 | <- matches item 12
| 1 | 3 | 14 | <- does not match 13, order 1 does not match
+--------+----------+------+
| 2 | 4 | 11 | <- matches item 11
| 2 | 5 | 12 | <- matches item 12
| 2 | 6 | 13 | <- matches item 13, order 2 matches
+--------+----------+------+
我相信我需要创建两个子查询来获取订单items
然后比较它们,但是如何处理订单number
?它需要按块进行比较。我应该以某种方式遍历所有内容number
吗?
(SELECT item FROM current_order ORDER BY sequence)
INNER JOIN
(SELECT item FROM history_orders ORDER BY sequence GROUP BY number)
...
先感谢您!
解决方案
查找当前订单是否已存在于历史记录中。
一般来说,它可以是,例如,
SELECT EXISTS ( SELECT NULL
FROM ( SELECT GROUP_CONCAT(item ORDER BY item) items
FROM current_order ) co
JOIN ( SELECT GROUP_CONCAT(item ORDER BY item) items
FROM history_orders
GROUP BY number ) ho USING (items)
) AS order_with_this_items_list_exists
推荐阅读
- php - 普通 SQLi 语句到 Prepared Statement 疑难解答
- javascript - 尝试创建交替图像横幅,但无法正常工作
- python - Python(树)中的引用问题
- git - Git log --stat 显示已删除的文件夹
- javascript - 猫鼬嵌套模式
- syntax - spss中的第一个和最后一个ID语法
- tfs - TFS 2013 通过多个工作项层次结构进行查询
- react-native - 有没有办法在 Snack 本地运行我现有的 React Native 项目?
- javascript - 组件模板应该只包含一个根元素 nuxt
- ios - 添加shared_preferences后,我无法构建Flutter的iOS模拟器