Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z UPDATE
Forum PHP.pl > Forum > Bazy danych > MySQL
atomek_16
Witam,

Na stronie:
http://bugs.mysql.com/bug.php?id=1038

Można przeczytać:

  1. mysql> CREATE TABLE a (a int, b int);
  2. Query OK, 0 rows affected (0.03 sec)
  3.  
  4. mysql> CREATE TABLE b (a int, b int);
  5. Query OK, 0 rows affected (0.04 sec)
  6.  
  7. mysql> INSERT INTO a VALUES (1,1),(2,1),(3,1);
  8. Query OK, 3 rows affected (0.00 sec)
  9. Records: 3 Duplicates: 0 Warnings: 0
  10.  
  11. mysql> INSERT INTO b VALUES (1,1), (3,1);
  12. Query OK, 2 rows affected (0.00 sec)
  13. Records: 2 Duplicates: 0 Warnings: 0
  14.  
  15. mysql> UPDATE a LEFT JOIN b ON a.a=b.a SET a.b=2, b.b=2 WHERE (a.b=1 AND b.b=1) OR b.a IS NULL;
  16. Query OK, 4 rows affected (0.01 sec)
  17. Rows matched: 5 Changed: 4 Warnings: 0
  18.  
  19. mysql> SELECT * FROM a; +------+------+
  20. | a | b |
  21. +------+------+
  22. | 1 | 2 |
  23. | 2 | 2 |
  24. | 3 | 2 |
  25. +------+------+
  26. 3 rows IN SET (0.00 sec)
  27.  
  28. mysql> SELECT * FROM b; +------+------+
  29. | a | b |
  30. +------+------+
  31. | 1 | 2 |
  32. | 3 | 1 |
  33. +------+------+
  34. 2 rows IN SET (0.00 sec)


Na USENET znalazłem, że tego typu update, to znaczy dane z jednej tabeli do drugiej, można wykonywać w 4.0.1 ver. mysql; wykonałem aktualizacje do 4.1 i nadal mam błąd przy:
  1. UPDATE a LEFT JOIN b ON a.a=b.a SET a.b=2, b.b=2 WHERE (a.b=1 AND b.b=1) OR b.a IS NULL;

ERROR 1064 (00000): Something is wrong in your syntax obok 'left join b on a.a=b
.a set a.b=2, b.b=2 where (a.b=1 and b.b=1) ' w linii 1
mysql>


Pomóżcie. Jak to zaaktualizować? Bo już mi ręce opadają sad.gif


====
Zaintalowałem 4.0.4.
C:\usr\mysql6\bin>mysqld -V
mysqld Ver 4.0.4-beta-max-debug for Win95/Win98 on i32

C:\usr\mysql6\bin>mysql -V
mysql Ver 12.14 Distrib 4.0.4-beta, for Win95/Win98 (i32)

  1. mysql> UPDATE a LEFT JOIN b ON a.a=b.a SET a.b=2, b.b=2 WHERE (a.b=1 AND b.b=1) OR b.a IS NULL;
  2. ERROR 1064: Something IS wrong IN your syntax obok 'left join b on a.a=b.a set a
  3. .b=2, b.b=2 where (a.b=1 and b.b=1) ' w linii 1
  4. mysql>


Na http://dev.mysql.com/doc/mysql/en/UPDATE.html
Czytamy:

"Starting with MySQL 4.0.4, you can also perform UPDATE operations that cover multiple tables:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;"


Ech ;/
Parti
U mnie działa:
Kod
mysql> create table a (a int, b int);
Query OK, 0 rows affected (0.07 sec)

mysql> create table b (a int, b int);
Query OK, 0 rows affected (0.05 sec)

mysql> insert into a values (1,1),(2,1),(3,1);
Query OK, 3 rows affected (0.03 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into b values (1,1), (3,1);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> update a left join b on a.a=b.a set a.b=2, b.b=2 where (a.b=1 and b.b=1) or b.a is NULL;
Query OK, 5 rows affected (0.05 sec)
Rows matched: 5  Changed: 5  Warnings: 0

mysql> select version();
+----------------+
| version()      |
+----------------+
| 4.1.3b-beta-nt |
+----------------+
1 row in set (0.00 sec)


W instrukcji pisze, ze od wersji 4.0.4, Ty masz jakąś wersja beta. Nie wiem, może ona jeszcze tego nie obslugiwała. Zainstaluj najnowszą (nie beta) wersje, czyli na dzień dzisiejszy 4.0.20 i pozbędziesz się kłopotów.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.