2013-03-04 5 views
0

Я, вероятно, нужна ваша помощь по этому ... У меня есть следующие MySQL Query:SQL SELECT и UPDATE Возвращает другой результат

SELECT * FROM dbName1.Prospects A 
LEFT JOIN dbName2.inbox B ON 
      substring(A.ProspectCellPhone, 2) = substring(B.SenderNumber, 4) OR 
      substring(A.ProspectCellPhone, 3) = substring(B.SenderNumber, 4) OR 
      substring(A.ProspectCellPhone, 4) = substring(B.SenderNumber, 4) 
LEFT JOIN dbName1.User C ON A.Username = C.Username 
WHERE B.TextDecoded IS NOT NULL 
AND substring(B.SenderNumber,1,1) = '+' 
AND B.NotificationFlag = '0' 

возвращающие 125 результат ... Но когда я пытался обновить с помощью тот же запрос, он возвращает только 45 результат обновленный ... запрос обновления:

UPDATE dbName1.Prospects A 
LEFT JOIN dbName2 B ON 
      substring(A.ProspectCellPhone, 2) = substring(B.SenderNumber, 4) OR 
      substring(A.ProspectCellPhone, 3) = substring(B.SenderNumber, 4) OR 
      substring(A.ProspectCellPhone, 4) = substring(B.SenderNumber, 4) 
LEFT JOIN dbName1.User C ON A.Username = C.Username 
SET B.NotificationFlag = '1' 
WHERE B.TextDecoded IS NOT NULL 
AND substring(B.SenderNumber,1,1) = '+' 
AND B.NotificationFlag = '0' 

Я сделал ничего плохого в UPDATE запрос?

Большое спасибо за вашу помощь ...

+1

dbName2.inbox в избранных является dbName2 в обновлении! это правильно? – CloudyMarble

+0

Вы уверены, что это соединение 1x1, а не nxm? Попробуйте выбрать различные параметры dbname1.prospects (независимо от первичного ключа), а не * в первом запросе – Techmonk

+0

В окне «Проверка обновлений» может быть изменено только 45 значений, другие значения могут совпадать с вашим значением обновления. Итак, он показывает 45 Обновлений –

ответ

0

Попробуйте использовать то же самое заявление, в вашем случае вторая линия отличается в обоих утверждений:

В заявление Выберите это:

LEFT JOIN dbName2.inbox B ON 

в заявлении Update это:

LEFT JOIN dbName2 B ON 
0

Выполнить этот запрос, чтобы проверить Rea Было добавлено количество записей из таблицы B.

Select distinct B.some_unique_field from dbName2.inbox B 
Left Join dbName1.Prospects A ON 
      substring(A.ProspectCellPhone, 2) = substring(B.SenderNumber, 4) OR 
      substring(A.ProspectCellPhone, 3) = substring(B.SenderNumber, 4) OR 
      substring(A.ProspectCellPhone, 4) = substring(B.SenderNumber, 4) 
WHERE B.TextDecoded IS NOT NULL 
AND substring(B.SenderNumber,1,1) = '+' 
AND B.NotificationFlag = '0'; 

Надеюсь мой запрос правильно :)

0

Ваш выбор не соответствует udpate, так как вы делаете обновление на б так basicaly он режет вниз a JOIN b и выберите это a LEFT JOIN b LEFT JOIN C. Кроме того, более чем одна строка в A может соответствовать строке в B, так что вы можете получить больше результатов, чем отдельные строки в B. Попробуйте это:

SELECT DISTINCT b.ID FROM dbName1.Prospects A 
JOIN dbName2.inbox B ON 
substring(A.ProspectCellPhone, 2) = substring(B.SenderNumber, 4) OR 
substring(A.ProspectCellPhone, 3) = substring(B.SenderNumber, 4) OR 
substring(A.ProspectCellPhone, 4) = substring(B.SenderNumber, 4) 
WHERE B.TextDecoded IS NOT NULL 
AND substring(B.SenderNumber,1,1) = '+' 
AND B.NotificationFlag = '0' 
Смежные вопросы