2013-03-04 31 views
0

我可能需要你對這個幫助... 我有以下MySQL查詢: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' 

難道我做錯什麼事上更新查詢?

非常感謝您的幫助...

+1

select中的dbName2.inbox是update中的dbName2!這是正確的嗎? – CloudyMarble 2013-03-04 10:07:21

+0

你確定它是1x1連接而不是nxm?嘗試在第一個查詢中選擇不同的dbname1.prospects(無論主鍵是什麼)而不是* – Techmonk 2013-03-04 10:08:18

+0

在更新檢查中,只有45個值可能被更改,其他值可能與您的更新值相同。所以它顯示45更新 – 2013-03-04 10:12:17

回答

0

嘗試使用相同的語句,你的情況二號線是在兩個不同的語句:

在Select語句是:

LEFT JOIN dbName2.inbox B ON 

在Update語句是:

LEFT JOIN dbName2 B ON 
0

運行此查詢檢查REA l表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

你的選擇,因爲你b上做一個更新不匹配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' 
相關問題