0

同じ構造を持つ 2 つのテーブル Board1 と Board2 があります。どちらも のプライマリ インデックス列を持っていますid。Table1 という 3 番目のテーブルがあり、これにはインデックスのない列board_idがあり、同じことboard_idが複数回発生します。board_id常にidBoard1 の に対応します。Board2 は現在空で、Board1 から行を追加したいのですが、同じことboard_idが Table1 で少なくとも 6 回発生する場合に限ります。Table1 は定期的に変更されるため、今後クエリを実行する必要がありますが、id既に Board2 にある行を 2 倍にする必要はありません。

要約すると:

Board1、Board2、および Table1 の 3 つのテーブルがあります。Board1 から Board2 に行をコピーしたいのですidが、Board1 の が (少なくとも) Table1 で「board_id」として 6 回発生する場所だけです。

助けていただければ幸いです!

編集:大変申し訳ありませんが、質問で大きな間違いを犯したことに気付きました。実際に必要なものを反映するように書き直しました。本当にごめんなさい。

4

3 に答える 3

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

より多くの列が必要な場合は、内部クエリと外部クエリでそれらを選択できます。

Selectのフィドルデモ

于 2013-02-28T10:50:17.407 に答える
0

これがあなたが求めたものです、フィドルで

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)
于 2013-02-28T10:59:17.683 に答える
0

以下のようなものを試してください:

  • 各行には一意の ID があると想定しているため、指定された場所に列名を追加します (ID 列を除く)。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)
于 2013-02-28T10:58:43.107 に答える