开发者

No Changed Rows Produced by this mySQL update query. Why?

开发者 https://www.devze.com 2023-02-10 03:59 出处:网络
I am at a loss this morning.Maybe my coffee was drugged?Simple problem- get the existing ids into this temp table for an export.

I am at a loss this morning. Maybe my coffee was drugged? Simple problem- get the existing ids into this temp table for an export.

Tables like so:

Table person

+--------+-----------------------+
| id     | email                 |
+--------+-----------------------+
| 142755 | xxxxxxx@xxxxxxxxx.com |
+--------+-----------------------+

Table no_dma

+--------+-开发者_Go百科-----------------------+
| person | email                  |
+--------+------------------------+
|     0  | xxxxxxx@xxxxxxxxx.com  |
+--------+------------------------+

Query:

UPDATE 
person, no_dma
SET no_dma.person = person.id
WHERE person.email = no_dma.email;

I have verified the existence of at least some matching email addresses in the two tables but the update produces

Query OK, 0 rows affected (9.31 sec)
Rows matched: 0  Changed: 0  Warnings: 0

Clearly I have a little dain bramamge today.

Help me out? What am I doing incorrectly?

// EDIT

Per comments below I made these queries:

mysql> select person, email from no_dma limit 0,1;
+--------+------------------------+
| person | email                  |
+--------+------------------------+
 |     0 | tom_r1989@xxxxxxx.com
+--------+------------------------+
1 row in set (0.00 sec)

mysql> select email from no_dma where email = 'tom_r1989@xxxxxxx.com';
Empty set (0.00 sec)

mysql> select email from no_dma where TRIM(email) = 'tom_r1989@xxxxxxx.com';
Empty set (0.46 sec)

Both tables have email field stored as varchar with collation set to latin1_swedish_ci.

And this this query, WTH?

mysql> SELECT CONCAT('"',email,'"') from no_dma limit 0,3;
+-----------------------+
| CONCAT('"',email,'"') |
+-----------------------+
"  |amjor308@xxx.com
"   |utt@xxx.com
"  |00000000@xxx.com
+-----------------------+


mysql> SELECT email from no_dma limit 0,3;
+--------------------+
| email              |
+--------------------+
 |+amjor308@xxx.com
  |mutt@xxx.com
 |000000000@xxx.com
+--------------------+

What is going on there? Looks like newlines but I thought TRIM() handled those?

mysql> SELECT TRIM(email) from no_dma limit 0,3;
+--------------------+
| TRIM(email)        |
+--------------------+
 |+amjor308@aol.com
  |mutt@excite.com
 |000000000@aol.com
+--------------------+
3 rows in set (0.00 sec)

UPDATE: FOUND ISSUE import was done on a Windows generated CSV but mysqlimport was given arg

--lines-terminated-by='\n'

Reimported data works fine. Sorry to have wasted folks time.


Table no_dma has a trailing space. The data is not the same.

Edit:

  • SET ANSI_PADDING?
  • Is it really a space:   is ASCII 160
  • What does a hash or checksum of each value reveal?
  • What are the string lengths?


The statement is fine, I think. B/c I tested it and it worked.

0

精彩评论

暂无评论...
验证码 换一张
取 消