簡體   English   中英

如何使用來自另一個表的隨機記錄更新給定的mySQL表

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

我需要做的是編寫一個UPDATE MySQL查詢, tbl_random根據這些條件更新more_data中的make modelmore_data

查詢必須從選擇一個隨機行tbl_products ,每相匹配model_idtbl_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM