2013-12-03 4 views
0

Im not PostgreDev, возникла проблема с возвратом только одного значения в подзапрос.Присоединиться к подзапросу PostgreSQL и одному значению

select * from 
(
select m_id from TableA where m_id = 236779 

)Main 
inner join 
(
select m_m_id as l_m_id,date_created as l_date_created 
from TableB 
where 
proc_type <> '-' 
order by date_created desc limit 1 
) CheckLastCode on (Main.m_id = CheckLastCode.l_m_id) 

Верните пустой комплект.

Когда я снять ограничение 1

select * from 
(
select m_id from TableA where m_id = 236779 

)Main 
inner join 
(
select m_m_id as l_m_id,date_created as l_date_created 
from TableB 
where 
proc_type <> '-' 
order by date_created desc 
) CheckLastCode on (Main.m_id = CheckLastCode.l_m_id) 

Вернется все из TableB.

Im пытается иметь только последнее значение из TableB

@EDIT Он должен работать для каждого m_id в TABLEA

Так что мой выход: M_ID | MAX (DATE_CREATED) для этого M_ID | ...

ответ

1

Вот SQL Fiddle, что демонстрирует следующий запрос:

SELECT * 
FROM TableA AS a 
    JOIN TableB as b 
    ON a.m_id = b.m_m_id AND b.date_created = 
    (
    SELECT MAX(bs.date_created) 
    FROM TableB bs 
    WHERE bs.m_m_id = a.m_id 
    LIMIT 1 
) 

Если таблицы имеют много записей, которые Вы можете применить диапазон в предложении WHERE для ускорения запроса, например:

SELECT * 
FROM TableA AS a 
    JOIN TableB as b 
    ON a.m_id = b.m_m_id AND b.date_created = 
    (
    SELECT MAX(bs.date_created) 
    FROM TableB bs 
    WHERE bs.m_m_id = a.m_id 
    LIMIT 1 
) 
WHERE a.m_id BETWEEN 2 AND 3 
+0

Ну, я добавил только один ID для тестирования. Он должен работать для каждого M_ID. ID | MAX (DATE) для этого ID | ... для этого ID – VoonArt

+0

Он будет работать только для M_ID = 236779. мне нужно сделать его работу для каждого m_id в таблице выберите * из ( выберите m_id из TableA --Возвращенной 8kk m_id-х ) Главная внутреннее соединение ( выберите m_m_id как l_m_id, DATE_CREATED в l_date_created из TableB где proc_type <> '-' заказа по date_created убывания предельных 1 ) CheckLastCode на (Main.m_id = CheckLastCode.l_m_id) – VoonArt

+0

* @ VoonArt * , Я только что обновил свой ответ, чтобы применить к вашему недавно обновленному вопросу. – Linger

0

Изменение второй запрос на:

select m_m_id as l_m_id,date_created as l_date_created 
    from TableB 
where proc_type <> '-' 
    and date_created = (select max(date_created) 
         from TableB 
         where m_m_id = 236779 limit 1) 
+1

Если вы получаете 'max (date_created)' ' из подзапроса вы также должны указать предложение WHERE 'm_m_id = 236779', иначе вы можете получить несвязанное значение date_created. – Linger

+0

Хорошая точка. Я изменю его. Благодарю. –

+0

* @ Jorge Campos *, на самом деле кажется, что 'l_m_id' является псевдонимом. Фактическое имя поля - 'm_m_id'. – Linger

Смежные вопросы