我有一个这样的表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_id
和model
。
我需要做的是编写一个更新的MySQL查询,该查询将根据这些标准更新make
中的model
more_data
和tbl_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
任何帮助或建议都将不胜感激!
答案 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。