gpt4 book ai didi

mysql - 交叉连接无法正常工作

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

任何人都知道如何查询:从 CROSS JOIN b 中选择 a.id、b.id从 b 交叉连接 a 中选择 a.id、b.id返回相同的结果?在这两种情况下,数量较少的表中的记录都会分配给数量较多的表。我想要得到这样的东西:

`| a.id | b.id |
-------+-----+
1 | q |
1 | w |
1 | e |
1 | r |
2 | q |
2 | w |
2 | e |
2 | r |

`

但我得到的结果是这样的:

`| a.id | b.id |
-------+-----+
1 | q |
2 | q |
1 | w |
2 | w |
1 | e |
2 | e |
1 | r |
2 | r |

`

有点奇怪的是,mysql 根据交叉连接表的数量自动选择交叉连接的顺序。我知道我可以使用 ORDER BY,但我需要通过 CROSS JOIN 来执行此操作。

有一个更复杂的问题,我想为每个a.id获取10条记录。我看到了解决方案:在 SELECT 子句中使用 IF 条件进行行计数。该行计数需要在原始结果中按 a.id 排序的行(没有 order by)。还有其他解决方案吗?

最佳答案

不,如果没有ORDER BY,则无法保证特定的顺序。如果您希望始终保持特定顺序,请使用 order by 子句。所以就你的情况来说,就像

SELECT a.id, b.id FROM a CROSS JOIN b
ORDER BY a.id;

i want to get 10 records per a.id.

LIMIT 子句与 ORDER BY 一起使用,如下所示;但如果不使用ORDER BY,你永远无法保证任何订单。查看 MySQL 文档以获取更多信息。

SELECT a.id, b.id FROM a CROSS JOIN b
ORDER BY a.id
LIMIT 0,10;

关于mysql - 交叉连接无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956732/

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