我有这个查询通过我的初始people
表并选择一个随机行:
SELECT * FROM people ORDER BY RAND() LIMIT 0,1
问题是,我的系统发生了一些变化,我目前需要在多个表(目前有两个)上进行此查询...但仍然可以获得相同的结果:< strong>单个随机行。
我自然想尝试以下内容,但我读到它最终会成为笛卡尔积:
SELECT * FROM people, products ORDER BY RAND() LIMIT 0,1
我想我可以使用UNION
来解决我的问题,但无法弄清楚如何。
我还必须确切people
和products
具有完全相同的结构(3个字段):
知道如何设法执行此查询吗?关于优化它的一些建议也很棒。
感谢您的帮助。
答案 0 :(得分:1)
使用联盟?
SELECT * FROM (
SELECT * FROM people ORDER BY RAND() LIMIT 0,1
UNION ALL
SELECT * FROM products ORDER BY RAND() LIMIT 0,1
) AS foo ORDER BY RAND() LIMIT 0,1
从每个表中获取一个随机行,然后随机选择其中一行作为最终结果。当然,这假设两个表具有相同的字段/结构。你可能需要做一些事情,比如
SELECT 'people' as source_table, id FROM people ...
UNION
SELECT 'products', id FROM products