0

I've prepared sql query like this

UPDATE Towar
JOIN TowarZamowienie ON Towar.Tow_id = TowarZamowienie.Tow_id
SET Tow_ilosc = Tow_ilosc - CAST(TowZam_ilosc AS UNSIGNED);

and it returns me Modified records: 0. I will admit that I've got records in database

Here are my tables:

TowarZamowienie 

1   TowZam_id         int(19) AUTO_INCREMENT   
2   Tow_id            int(255)            
3   Zam_id            int(255)             
4   TowZam_ilosc      varchar(10)

Towar

1     Tow_id           int(255)
2     Tow_ilosc        int(6)  

Here is my schema http://sqlfiddle.com/#!2/981b4/1

user3310883
  • 95
  • 1
  • 2
  • 9

4 Answers4

1

i guess you making wrong in the ON clause

try this

    ON Towar.Tow_id = TowarZamowienie.TowZam_id

DEMO

echo_Me
  • 37,078
  • 5
  • 58
  • 78
  • look at this http://i59.tinypic.com/mif3fa.png it should change values where tow_id is the same as tow_id from towarzamowienie http://i60.tinypic.com/2i7sdu8.png – user3310883 Feb 18 '14 at 11:54
  • @user3310883 i have seen the images but you have Twozam_ilosc is 0 according to two_zam 5 , how will this be 99 ? look this [demo](http://sqlfiddle.com/#!2/8596ce/1) – echo_Me Feb 18 '14 at 12:24
  • In this case it should return 100-0 =100, no change – user3310883 Feb 18 '14 at 12:30
  • but when TowZam_ilosc is for example 1 it should return 99 in Towar.Tow_ilosc – user3310883 Feb 18 '14 at 12:31
  • I don't get why Towar with Tow_id 16 and more has changed.. The only one Towar modified in this case should be Towar with Tow_id 5 – user3310883 Feb 18 '14 at 12:35
  • dude i really dont understand you , look this [demo](http://sqlfiddle.com/#!2/e61702/1) i changed just the SET .... with -1 . your query is good , you didnt get twoyam 5 to change because its equivalent value of twozam_ilosc is 0 . – echo_Me Feb 18 '14 at 12:53
0

Try this code

  UPDATE Towar
 JOIN 
    TowarZamowienie ON Towar.Tow_id = TowarZamowienie.TowZam_id
 SET 
    Tow_ilosc = Tow_ilosc - CAST(TowZam_ilosc AS UNSIGNED);
SAT
  • 647
  • 1
  • 12
  • 23
0

Why not "cast" the Integer to Varchar? What if the Varchar has really 10 chars and the Integer will expect just 6 numbers? Try this:

CAST(Tow_ilosc as CHAR(10))

or

CONVERT(Tow_ilosc, CHAR(10))

or just use like in the where clause

WHERE Tow_ilosc LIKE TowZam_ilosc

(I don't like like)^^

Ben
  • 391
  • 5
  • 13
0
UPDATE Towar, TowarZamowienie
SET Towar.Tow_ilosc = Towar.Tow_ilosc - CAST(TowarZamowienie.TowZam_ilosc AS UNSIGNED)
WHERE Towar.Tow_id = TowarZamowienie.TowZam_id;

--OR

UPDATE Towar
JOIN TowarZamowienie ON Towar.Tow_id = TowarZamowienie.TowZam_id
SET Tow_ilosc = Tow_ilosc - CAST(TowZam_ilosc AS UNSIGNED);
Bandreid
  • 2,727
  • 28
  • 47