2013-02-28 28 views
0

我有兩個表Board1和Board2具有相同的結構。他們都有一個主要索引列id。我有一個名爲Table1的第三個表,它有一個非索引列board_id,其中多次出現相同的board_idboard_id總是對應於Board1中的id。 Board2目前是空的,我想添加來自Board1的行,但只有在Table1中至少出現六次相同的board_id。 Table1將會定期更改,所以我將來需要做這個查詢,但不會使已經在Board2中的行數增加一倍id如果值存在,則複製行x次數

因此,要回顧:

有三個表:委員會1,Board2和表1。我想將Board1的行復制到Board2,但只有Board1中的id發生(至少)Table1中'board_id'的六次。

我很感激任何幫助!

編輯:我很抱歉,但我意識到我犯了一個巨大的錯誤在我的問題。我已經重寫它以反映我實際需要的內容。我真的很抱歉。

+0

請出示你的表結構。 – 2013-02-28 10:42:31

+0

@raheelshan我不介意,但你能告訴我這將有什麼幫助嗎?我想將所有列複製到Table2,但所有複製都嚴格依賴'id'和'board_id'列。 – Phil 2013-02-28 10:45:20

+0

exising答案仍然基本上回答你的問題,通過子查詢組是關鍵。 – Jodrell 2013-02-28 11:24:20

回答

0

如果你需要更多的列,你可以在內部和外部查詢,選擇它們可以像下面這樣做

INSERT INTO Table2 

SELECT 
    id, 
    board_id 
FROM (SELECT 
    b.id, 
    b.board_id, 
    bl.Count 
     FROM board as b 
    LEFT JOIN (SELECT 
      board_id, 
      COUNT(board_id) as `Count` 
      FROM board 
      GROUP BY board_id) as bl 
     on bl.board_id = b.board_id 
     group by b.id 
     having bl.Count >= 6) as L 

Fiddle Demo for Select

+0

爲什麼左連接,缺席'Board_Id's將有一個計數少於六個 – Jodrell 2013-02-28 11:01:03

+0

你可以用內部來代替。還計算和讓我管理這件事(有bl.Count> = 6) – 2013-02-28 11:02:08

+0

您不要在'Table2上進行存在檢查。 – Jodrell 2013-02-28 11:12:35

0

嘗試像下面:

  • 添加您的列名在指定的位置(不包括任何ID列),因爲我假設每一行都有一個唯一的ID,這樣你就贏了「T能夠GROUP和COUNT做SELECT * FROM Table1

您可能需要測試/驗證此

INSERT INTO Board2 (Your Column Names) 
SELECT (Your Column Names)  
FROM Board1 
WHERE id (IN (SELECT board_id 
        FROM Table1 
        GROUP BY (board_id) 
        HAVING (COUNT(*) >= 6))  
AND board_id NOT IN(SELECT DISTINCT board_id FROM Board2) 
+0

我真的很抱歉,我在這個問題上犯了一個錯誤的錯誤。我現在編輯它... – Phil 2013-02-28 11:18:45

+0

我的答案應該仍然有效,我只是稍微修改了表名 – Tanner 2013-02-28 11:27:00

+0

Tanner,我可以插入Board2 SELECT * FROM Board1抓取所有列/數據嗎? – Phil 2013-02-28 11:29:24

0

這裏是你問什麼,有fiddle

INSERT Table2 
SELECT 
      * 
    FROM 
      Table1 
     JOIN 
      (
      SELECT 
        Board_Id, 
        count(*) cnt 
       FROM 
        Table1 
       GROUP BY 
        Board_Id 
      ) BoardIds 
       ON BoardIds.Board_Id = Table1.Board_Id 
    WHERE 
      BoardIds.cnt > 5 
     AND 
      NOT EXISTS (SELECT id FROM Table2 WHERE Table2.id = Table1.id) 
+0

我真的很抱歉,我在這個問題上犯了一個錯誤的錯誤。我現在編輯了它... – Phil 2013-02-28 11:19:31

相關問題