如何使用另一个表中的随机记录更新给定的mySQL表

时间:2015-01-09 14:18:07

标签: php mysql select random sql-update

我有一个这样的表tbl_random,有大约3000个关键字和model_ids。关键字是唯一的,model_ids不是:

+---------+------------+---------+---------+--------------+
| keyword | model_id   | make    |  model  |  more_data   |
+---------+------------+---------+---------+--------------+
| apple1  | 15         |         |         |              |
| apple2  | 15         |         |         |              |
| pear    | 205        |         |         |              |
| cherry  | 307        |         |         |              |
| melon   | 5023       |         |         |              |
+---------+------------+---------+---------+--------------+

我有第二张表tbl_products,其中包含约500K条记录,其中包含实际产品及其详细信息:

+---------+--------+------------+
| make    | model  | more_data  |
+---------+--------+------------+
| app1    | 15     | data1      |
| app1    | 15     | data2      |
| cher74  | 307    | data4      |
| melo2   | 5023   | data5      |
| pear53  | 205    | data3      |
+---------+--------+------------+

两个表之间的公共标识符分别为model_idmodel

我需要做的是编写一个更新的MySQL查询,该查询将根据这些标准更新make中的model more_datatbl_random

查询必须从tbl_products中选择一个与model_id的{​​{1}}匹配的随机行作为唯一关键字。

我尝试使用UPDATE,LEFT JOIN和SELECT STATEMENTS以各种方式执行此操作,但到目前为止无法使其工作。

我的最新声明,试图只更新tbl_random就是这个,但它不起作用 - MySQL开始执行它并且没有任何反应,除了我需要重新启动MySQL以使其再次可用:

make

UPDATE tbl_random SET tbl_random.make = (SELECT tbl_products.make FROM tbl_products WHERE tbl_random.model_id = tbl_products.model GROUP BY tbl_random.keyword ORDER BY RAND()) 的最终所需输出是这一个:

tbl_random

任何帮助或建议都将不胜感激!

1 个答案:

答案 0 :(得分:-1)

看起来您的内部选择会返回多个项目,然后您尝试将其分配给单个字段。

尝试将LIMIT 1添加到内部选择中。

UPDATE tbl_random
    SET tbl_random.make =
    (SELECT tbl_products.make FROM tbl_products                     
    WHERE tbl_random.model_id = tbl_products.model
    GROUP BY tbl_random.keyword       
    ORDER BY RAND() LIMIT 1)

我认为如果第一个选项没有

,这可能会有用
REPLACE tbl_random (keyword, model_id, make, model) INTO
    SELECT rand2.keyword, rand2.model_id, (SELECT tbl_products.make FROM tbl_products                     
        WHERE rand2.model_id = tbl_products.model
        ORDER BY RAND() LIMIT 1), rand2.model_id
    FROM tbl_random as rand2

然后,您必须运行第二个查询,使用make和model作为唯一键来更新more_data。