Как выбрать желаемый результат в MySQL? - PullRequest
0 голосов
/ 01 октября 2009

установка:

create table main(id integer unsigned);    
create table test(id integer unsigned,created datetime,text text);

insert into main value(1);
insert into test value(1,now(),'something1');    
insert into test value(1,now() + interval 1 day,'something2');

Использование:

select main.id, text from main left join test on main.id=test.id
group by main.id where main.id in (1,2,3);

возвращается:

+------+------------+
| id   | text       |
+------+------------+
|    1 | something1 |
+------+------------+

Как достать

+------+------------+
| id   | text       |
+------+------------+
|    1 | something2 |
+------+------------+

Ответы [ 4 ]

1 голос
/ 01 октября 2009

Попробуйте следующий оператор SQL:

SELECT id, (
    SELECT text
    FROM test
    WHERE test.ID = main.ID
    ORDER BY created DESC 
    LIMIT 0 , 1
    ) AS text

FROM main

Edit:

Если вам нужно несколько столбцов из таблицы test, вам нужно добавить первичный ключ. Затем в своем запросе сначала получите столбец первичного ключа и используйте его как ссылку для следующих подзапросов:

# Add the primary key
ALTER TABLE `test` ADD `test_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST ;

# Select many columns
SELECT id, (

    SELECT test_id
    FROM test
    WHERE test.ID = main.ID
    ORDER BY created DESC 
    LIMIT 0 , 1

) AS testID, (

    SELECT text
    FROM test
    WHERE test_id = testID

) AS text, (

    SELECT created
    FROM test
    WHERE test_id = testID

) AS created

FROM main
0 голосов
/ 01 октября 2009
SELECT 
        main.id , test.created , test.text 
    FROM 
        main 
        JOIN test ON (main.id = test.id) 
        JOIN (select id,max(created) as created from test group by id) as t2 ON (test.id = t2.id and test.created =t2.created)
0 голосов
/ 01 октября 2009

РЕДАКТИРОВАНИЕ:

А как насчет этого?

select
    main.id, a1.created,a1.text
from
    main
inner join test a1 on
    a1.id = main.id
LEFT OUTER JOIN test a2 ON
    (a1.id = a2.id
    AND (a1.created < a2.created))
WHERE a2.id IS NULL;
0 голосов
/ 01 октября 2009
select id, text from main left join test on main.id=test.id order by created

Возможно, вам придется использовать ASC (окончание) или DESC (окончание)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...