Hi all,

I think you misunderstood me. :-) I try to be more detailed, and I will also give an example.

So, I have these two tables:

----------------------------------------
CREATE TABLE main (
  ID int not null,
  Value int,

primary key (ID)) Type = InnoDB;

CREATE TABLE sub (
  MainID int not null,
  KeyDate date not null,
  SubValue int not null,

primary key (MainID, KeyDate),

 foreign key (MainID) references main (ID)) Type = InnoDB;
----------------------------------------

In the tables I have these lines:

----------------------------------------
INSERT INTO main VALUES
(1, null),
(2, null),
(3, null),
(4, null),
(5, null);

INSERT INTO sub VALUES
(1, '2001-01-01', 5),
(1, '1999-01-01', 10),
(2, '2001-01-01', 3),
(2, '2001-01-02', 4),
(4, '2001-01-01', 8);
----------------------------------------

Now, I want to update the `Value` fields in the `main` table for ALL records to contain the latest `SubValue` from the `sub` table.

So I want this to be in the `main` table:
ID      Value
--      -----
1       5
2       4
3       null
4       8
5       null
--      -----

For this I need to select the most recent `SubValue` from the sub table (e.g.: The `SubValue` with the latest `KeyDate` for a specified `MainID`).
I can do that this way (if you have other idea, tell me! :-)):


select SubValue from sub where MainID = xxx order by KeyDate desc limit 1

(xxx means an ID from the `main` table)

This query obviously returns with one record or null so I expect that this won't be a problem if I use this query as a subquery.
(By the way, I get the same weird behavior in any subquery expression where I use the "limit" parameter.)


Now, I want to update my `main` table to get the result above.

update main set Value = (select SubValue from sub where MainID = main.ID order by KeyDate desc limit 1)

This update sequence runs well, but the result in the `main` table will be this:
ID Value
-- -----
1 5
2 4
3 4
4 4
5 4
-- -----


which is absolutelly not what I expected.

Thanks for your help in advance,
        Dani



--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]



Reply via email to