Внутреннее соединение (выбрать . из)

Мне нужно получить последнюю запись, опубликованную пользователями. Следующий запрос ниже получит необходимую мне информацию, если я захочу, если я могу сделать заказ до группировки по

select a.client_id, a.client, b.title, b.type, b.created 
  from profile_users a, node b 
 where a.uid = b.uid 
   and b.type = 'event' 
   and a.status=1 
   and a.client_id in (select c.client_id 
                         from profile_users c, follows d 
                        where c.uid = d.followed_id 
                          and d.following_id =3) 
 group by a.client_id 
 order by a.client_id,
          b.created desc

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

select b.client_id, b.client, a.title, a.created
  from node a 
 inner join profile_users b on a.uid=b.uid 
 inner join (select c.client_id
               from profile_users c 
              inner join follows d on c.uid=d.followed_id
              where c.status = 1
                and d.following_id = 3
              order by c.client_id
             ) as X1

sql
person user1767411    schedule 23.10.2012    source источник
comment
добавить имя таблицы во второе внутреннее соединение   -  person SRIRAM    schedule 23.10.2012
comment
@SRIRAM: во втором внутреннем соединении не отсутствует имя таблицы, в нем отсутствует условие соединения.   -  person a_horse_with_no_name    schedule 23.10.2012


Ответы (2)


Используйте sql «partition by», это позволит вам сортировать записи без группировки.

http://learnsqlserver.in/2/Partition-By-Clause.aspx

Это лучше всего использовать вместо group by.

person Rusty    schedule 23.10.2012

Вам нужно использовать связанный подзапрос, чтобы определить последний пост:

select a.client_id, a.client, b.title, b.type, b.created 
  from profile_users a
    join node b on a.uid = b.uid 
 where b.type = 'event' 
   and a.status=1 
   and a.client_id in (select c.client_id 
                         from profile_users c
                           join follows d on c.uid = d.followed_id
                        where d.following_id = 3) 
   and b.created = (select max(n2.created) 
                    from node n2
                    where n2.uid = a.uid)
 order by a.client_id,
          b.created desc

Я также изменил ваши неявные соединения в старом стиле в предложении where на явные с использованием ключевого слова JOIN.

person a_horse_with_no_name    schedule 23.10.2012
comment
Спасибо, измененный запрос помогает. Я все еще работаю над этим, поскольку на выходе есть все записи, за которыми следует человек, а не только последняя запись. - person user1767411; 24.10.2012
comment
Ниже приведен запрос, который сработал для меня -------- выберите a.client_id, a.client, b.nid, b.title, b.type, b.created from profile_users узел соединения b на a. uid = b.uid, (выберите d.uid, d.client_id, d.client, c.created, c.title из node c join profile_users d на c.uid=d.uid соединение следует за e на d.uid=e .followed_id, где c.type = 'event' и d.status = 1 и e.following_id = 3 в порядке d.client_id, c.created desc) n2, где b.type = 'event' и a.status = 1 и b .uid = n2.uid и b.created = n2.created и b.title = n2.title группа по a.client_id - person user1767411; 07.11.2012