2016-02-06 98 views
0

我的任務是從另一臺
插入每個ID 3個隨機DATAS,我得到了與語法SQL |插入+條件選擇+變量?

set @num := 0, @type := '' ,@stat :=''; 
INSERT INTO random 
as 
(
SELECT 
* 
FROM (
select userID,userNAME, chaID, chaNAME,goal,gender, 
     @num := if(@type = userID, @num +1,1) as row_number, 
     @type := userID as dummy, 
     @stat as status 
    from userchar 
    order by userID 
) as x where x.row_number <= 3) 

我打算把這個代碼在事件調度插入在日常

的科研數據錯誤

1064 - 您的SQL語法錯誤;檢查 對應於您MariaDB的服務器版本正確的語法使用 附近手冊「INSERT INTO隨機的(SELECT * FROM(選擇用戶ID,用戶名, CHAID,C」第2行

謝謝。這麼多的每一個建議

回答

0

我懷疑問題是試圖運行在同一時間多個語句您可以通過查詢本身初始化變量解決這個問題:

INSERT INTO random(. . .) 
    select u.* 
    from (select userID, userNAME, chaID, chaNAME, goal, gender, 
       (@num := if(@u = userID, @num +1, 
          if(@u := userId, 1, 1) 
          ) 
       ) as row_number, 
       userID as dummy, 
       @stat as status 
      from userchar u cross join 
       (select @u = '', @num := 0, @stat := '') params 
      order by userID, rand() 
     ) u 
    where u.row_number <= 3; 

有幾個超視距呃問題:

  • 當使用insert時,總是列出列。如果你正在學習SQL,這一點尤其重要,所以你要學習良好的習慣。
  • 您不應該在一個表達式中分配變量值並在另一個表達式中使用它。 MySQL(和MariaDB)不保證select中表達式的評估順序,因此可以按任意順序評估表達式。
  • 如果你想隨機行,然後使用rand()。 「不確定」和「隨機」之間有區別。
+0

現在工作正常。非常感謝你的解答和建議> _ <我會越來越多地學習! –