2013-03-04 32 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' 
相关问题