2017-02-07 3 views
-2

Рассмотрим у меня есть две таблицы tab1 и tab2:PostgreSql - ВЫБРАТЬ Макс повторяется из другой таблицы

+-----------+-----------+ 
| ID_t1  | col2  | 
+-----------+-----------+ 
| 1   | 1  | 
+-----------+-----------+ 
| 2   | 1  | 
+-----------+-----------+ 

И TAB2:

+-----------+-----------+ 
| ID_t2  | ID_t1 | 
+-----------+-----------+ 
| 1   | 1  | 
+-----------+-----------+ 
| 2   | 1  | 
+-----------+-----------+ 
| 3   | 1  | 
+-----------+-----------+ 
| 4   | 2  | 
+-----------+-----------+ 

Я пытаюсь найти объект, который имеют те tab1.col1 = 1 и максимальная строка в таблице tab2, поэтому результат должен быть похож на объект 1

+-----------+-----------+ 
| ID_t1  | col2  | 
+-----------+-----------+ 
| 1   | 1  | 
+-----------+-----------+ 

Я стараюсь это:

SELECT ID_t1 FROM tab1 
    WHERE tab1.col2 = 1 and 
      ID_t1 = (SELECT ID_t1 FROM tab2 WHERE -- MAX ONE REPEATED IN THIS TABLE) 

Я действительно складывают, как я могу конкурировать этот запрос, вы можете помочь мне, пожалуйста.

+2

Вы используете MySQL, Oracle или Postgresql? Не помещайте те продукты, которые не задействованы. – jarlh

+0

Я использую Postgresql @jarlh –

+0

Какова максимальная строка в таблице 'tab2'?? Я не вижу столбца под названием 'line'. Таблицы SQL представляют собой * неупорядоченные * наборы; нет никакого максимума, если не указано задание. –

ответ

0

Я нашел ответ на мой вопрос:

SELECT 
    tab1 as id, 
    COUNT(*) as nombre 
FROM 
    tab1, tab2 
WHERE 
    tab2.ID_t1 = tab1.ID_t1 and 
    tab1.col2 = 1 
GROUP BY tab2.ID_t1 
ORDER BY nombre desc LIMIT 1 
1

Вы ищете это:

SELECT ID_t1 
FROM tab1 
WHERE tab1.col2 = 1 AND 
     ID_t1 = (SELECT ID_t1 
       FROM tab2 
       GROUP BY ID_t1 
       ORDER BY COUNT(*) DESC 
       LIMIT 1) 
+0

i get и error 'ID_t1 должен быть в GROUP BY ...' –

+0

@YCF_L Вы включили 'GROUP BY ID_t1' в ваш запрос? –

+0

извините, извините, его мои ошибки –

1

Вы можете использовать LIMIT в подзапрос:

select 
from tabl1 
where id_t1 in (
    select id_t1 
    from tab2 
    group by id_t1 
    order by count(*) desc 
    limit 1 
) and col2 = 1; 
+0

извините, я думаю, что я делаю ошибки, оба из ID_t1 = 1 и 2 должны иметь тот же col2 –

+0

запрос не работает для вас? – GurV

1

Попробуйте

select ID_t1, col2 from tab1 
where ID_t1=1 and 
col2= 
(
select ID_t1 from tab2 
group by ID_t1 
order by count(*) DESC 
limit 1 
) 
+0

извините, я думаю, что делаю ошибки, оба ID_t1 = 1 и 2 должны иметь одинаковые col2 –