2012-06-30 3 views
0

Я нормализую существующую базу данных. В настоящее время у меня есть два столбца в таблице 1, домен и контейнер с ограниченными отдельными комбинациями (в настоящее время ~ 30 комбинаций этих двух из 1000 записей). Я построил новую таблицу 2, которая содержит все комбинации, с первичным ключом (container_id), автоматически созданным при установке новой записи. Я добавил столбец container_id в таблицу1 и хочу заполнить значения на основе столбца Table1.container.MySQL Как обновить строки на основе существующих значений

На данный момент все имена контейнеров в таблице 2 отличаются друг от друга, но это может измениться в будущем, следовательно, необходимо, чтобы уникальный номер был как ПК.

т.е.

UPDATE Table1 
SET container_id = (SELECT Table2.container_id 
    FROM Table2 
    WHERE Table2.container = Table1.container) 
WHERE EXISTS 
    (SELECT Table2.container_id 
    FROM Table2 
    WHERE Table2.container = Table1.container) 

Этот запрос возврат error 1242: subquery returns more than one row. Могу ли я лай на совершенно неправильное дерево? Таблица 2 должна иметь нулевые повторяющиеся значения.

+0

В вашем заявлении UPDATE есть два подзапроса, и только первая может произвести эту ошибку. Основываясь на условии подзапроса, я могу заключить только одно: ваш догадку о том, что «все имена контейнеров в таблице 2 отличные» больше не верны. –

ответ

0

я должен использовать объединение, чтобы обновить TABLE1

UPDATE Table1 
LEFT JOIN Table2 USING (container) 
SET Table1.contanier_id = Table2.contanier_id 
WHERE Table1.contanier_id IS NULL AND Table2.contanier_id IS NOT NULL; 
0

Table2.container не уникальна, следовательно, может получить повторен. Из-за этого оба подзапроса возвращают более одной строки.