簡體   English   中英

MySQL從另一個表插入隨機值

[英]MySQL insert random values from another table

嗨,我想從一個表中插入一些隨機值到另一個表,我的查詢看起來像這樣:

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`) VALUES (17,(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 3))

問題是,mysql需要4個參數(matchID,questionOneID,...),並且僅獲得兩個參數(17,(...)),我如何告訴MySql它從SELECT獲取3個參數? 我真的必須:

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`) VALUES (17,(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),(SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1))

或者,還有更好的方法?

您的查詢看起來正確。 我會用insert . . . select編寫它insert . . . select insert . . . select insert . . . select

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`)
     SELECT 17,
            (SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),
            (SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1),
            (SELECT `id` FROM `questions` ORDER BY RAND() LIMIT 1);

如果您想保證這三個問題有所不同,那么我可以改用這種方法:

INSERT INTO `rounds`(`matchID`, `questionOneID`, `questionTwoID`, `questionThreeID`)
    SELECT 17,
           substring_index(group_concat(id order by rnd), ',', 1),
           substring(substring_index(group_concat(id order by rnd), ',', 2), ',', 11),
           substring_index(group_concat(id order by rnd), ',', -1),
    FROM (SELECT id, rand() as rnd FROM questions ORDER BY RAND() LIMIT 3) q

這會將三個隨機問題放在一行上,沒有重復項(除非idquestions重復)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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