[英]How to UPDATE a given mySQL table with random record from another table
我有一个这样的表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
,其中包含大约50万条记录,其中包含实际产品及其详细信息:
+---------+--------+------------+
| make | model | more_data |
+---------+--------+------------+
| app1 | 15 | data1 |
| app1 | 15 | data2 |
| cher74 | 307 | data4 |
| melo2 | 5023 | data5 |
| pear53 | 205 | data3 |
+---------+--------+------------+
这两个表之间的公共标识符分别是model_id
和model
。
我需要做的是编写一个UPDATE MySQL查询, tbl_random
根据这些条件更新more_data
中的make
model
和more_data
:
查询必须从选择一个随机行tbl_products
,每相匹配model_id
从tbl_random
为独特的关键字。
我试图使用UPDATE,LEFT JOIN和SELECT STATEMENTS以各种方式执行此操作,但到目前为止无法正常工作。
我最新的声明仅尝试更新make
,但这是行不通的-MySQL开始执行它,除了我需要重新启动MySQL以使其再次可用之外,什么也没有发生:
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
的最终所需输出是以下内容:
+---------+------------+---------+---------+--------------+
| keyword | model_id | make | model | more_data |
+---------+------------+---------+---------+--------------+
| apple1 | 15 | app1 | 15 | data1 |
| apple2 | 15 | app1 | 15 | data2 |
| pear | 205 | pear53 | 205 | data3 |
| cherry | 307 | cher74 | 307 | data4 |
| melon | 5023 | melo2 | 5023 | data5 |
+---------+------------+---------+---------+--------------+
任何帮助或建议,将不胜感激!
看起来您的内部选择返回了多个项目,然后您尝试将其分配给单个字段。
尝试将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)
我认为如果firs选项不起作用,这可能会起作用
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.