2013-02-28 4 views
0

У меня есть две таблицы Board1 и Board2 с одинаковой структурой. Они оба имеют первичный индексный столбец id. У меня есть таблица THIRD Table1, которая имеет неиндексированный столбец board_id, где тот же board_id встречается несколько раз. board_id всегда соответствует id в Board1. Board2 в настоящее время пуст, и я хочу добавить строки из Board1, но только там, где один и тот же номер board_id встречается по меньшей мере шесть раз в таблице 1. Таблица 1 будет меняться периодически, поэтому мне нужно будет выполнить запрос в будущем, но без удвоения id строк, которые уже находятся в Board2.Копирование строк, если значение существует x количество раз

Подведем итоги:

Есть три таблицы: совет1, комитетом2 и Table1. Я хочу скопировать строки из Board1 в Board2, но только там, где id в Board1 встречается (по крайней мере) шесть раз в таблице1 как «board_id».

Буду признателен за любую помощь!

EDIT: Мне ужасно жаль, но я понял, что совершил огромную ошибку в моем вопросе. Я переписал его, чтобы отразить то, что мне действительно нужно. Мне очень жаль.

+0

Пожалуйста, покажите ваши структуры таблицы. –

+0

@raheelshan Я не против, но не могли бы вы рассказать мне, как это поможет? Я хочу скопировать все столбцы в таблицу2, но все копирование строго зависит от столбцов «id» и «board_id». – Phil

+0

Исходящие ответы по-прежнему по существу отвечают на ваш вопрос, группа по подзапросу - это ключ. – Jodrell

ответ

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' будет иметь счет меньше шести – Jodrell

+0

, вы можете использовать внутренний вместо этого. Также подсчитываю и убираю эту вещь (имея bl.Count> = 6) –

+0

Вы не выполняете проверку существования на 'Table2. – Jodrell

0

Попробуйте что-то вроде ниже:

  • Добавьте имена столбцов, где указано (за исключением каких-либо идентификационных столбцов), так как я предполагаю, что каждая строка будет иметь уникальный идентификатор, так что вы выиграли «т быть в состоянии 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

+0

мой ответ все еще должен быть действительным, я только немного изменил имена таблиц – Tanner

+0

Tanner, могу ли я сделать INSERT INTO Board2 SELECT * FROM Board1, чтобы захватить все столбцы/данные? – Phil

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

Смежные вопросы