[英]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.