2016-03-18 2 views
1

Почему я получаю код ошибки 1066. Не уникальный стол/псевдоним usps 75078 на этом сценарии SQL:Зачем нужна ошибка MySQL 1066 во внутреннем соединении?

UPDATE `20160318 flagdatabase`, 
     `usps 75078` 
INNER JOIN `usps 75078` ON `20160318 flagdatabase.Street` = `usps 75078.Street_Name` 
SET `20160318 flagdatabase.Carrier_Route` = `usps 75078.Carrier_Route` 
SET `20160318 flagdatabase.Zip4_Low_Add` = `usps 75078.Zip4_Low_Add` 
SET `20160318 flagdatabase.Zip4_High_Add` = `usps 75078.Zip4_High_Address` 
WHERE `20160318 flagdatabase.Street` = `usps 75078.Street_Name` 
    AND `20160318 flagdatabase.HouseNumber` >= `usps 75078.Primary_Low_Address` 
    AND `20160318 flagdatabase.HouseNumber` <= `usps 75078.Primary_High_Address`; 
+0

Похоже, что при подключении к таблице вам нужно использовать два уникальных идентификатора. См. [Этот ответ] (http://stackoverflow.com/a/1435186/864233) – romellem

+1

является '20160318' в базе данных? если это так, то должно быть: '20160318.flagdatabase'? У вас на самом деле нет пробелов в именах столбцов/таблиц? Это будет интересно читать и поддерживать? Пожалуйста, добавьте в таблицу свои предложения, чтобы я мог понять, что на самом деле происходит? –

ответ

0

Я думаю, что вам нужно исправить свой запрос, и оставить его так:

UPDATE `20160318 flagdatabase`, 
INNER JOIN `usps 75078` ON `20160318 flagdatabase.Street` = `usps 75078.Street_Name` 
SET `20160318 flagdatabase.Carrier_Route` = `usps 75078.Carrier_Route`, 
`20160318 flagdatabase.Zip4_Low_Add` = `usps 75078.Zip4_Low_Add`. 
`20160318 flagdatabase.Zip4_High_Add` = `usps 75078.Zip4_High_Address` 
WHERE `20160318 flagdatabase.Street` = `usps 75078.Street_Name` 
    AND `20160318 flagdatabase.HouseNumber` >= `usps 75078.Primary_Low_Address` 
    AND `20160318 flagdatabase.HouseNumber` <= `usps 75078.Primary_High_Address`; 
1

Ваш запрос очень трудно прочитать из-за (безумного) использования точек и пробелов в именах таблиц, поэтому я перефразирую использование имен заполнителей.

Ваш запрос выглядит следующим образом:

update t1, t2 join t2 on some condition 
... 

который перечисляет t2 дважды в запросе. Вы должны дать (по крайней мере) один из t2 ссылается на псевдоним, и использовать этот псевдоним вместо имени таблицы в течение запроса, как это:

update t1, t2 join t2 as t3 on some condition 
... 

Здесь я использовал «t3», как псевдоним.

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