从多个表中选择以获得单个随机行

时间:2014-08-13 19:47:36

标签: mysql select union

我有这个查询通过我的初始people表并选择一个随机行:

SELECT * FROM people ORDER BY RAND() LIMIT 0,1

问题是,我的系统发生了一些变化,我目前需要在多个表(目前有两个)上进行此查询...但仍然可以获得相同的结果:< strong>单个随机行。

我自然想尝试以下内容,但我读到它最终会成为笛卡尔积:

SELECT * FROM people, products ORDER BY RAND() LIMIT 0,1

我想我可以使用UNION来解决我的问题,但无法弄清楚如何。

我还必须确切peopleproducts具有完全相同的结构(3个字段):

  • ID
  • 名称
  • 描述

知道如何设法执行此查询吗?关于优化它的一些建议也很棒。

感谢您的帮助。

1 个答案:

答案 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