2010-10-15 2 views
0

Эй, ребята, я действительно испортил это. Я пробовал это, но это не удалось. У меня есть три таблицы, в которых пользовательские поляристы искали два раза в разные дни, с увеличением числа друзей во втором поиске в таблице b. Мне просто нужно создать запрос, который даст мне двух новых добавленных друзей (не будет присутствовать в конце списка второго поиска). В таблице свозникает будет 20 друзей polard отображается с USID 1, а затем 22 друзей с USID 2 означает Всего записей будет 42.Sql friends datatable query

table a    
uid name 
1  karos 
2  polard 

table b        
usid umid name friends 
1  2 polard 20 
2  2 polard 22 

table c 
usrid usid name friends 
1  1 hansy 10 
2  1 boje 23 
.  .  .  . 
.  .  .  . 

Ваша помощь будет geatly оценена. Спасибо заранее.

ответ

1

Является ли это что ты ищешь?

SELECT usrid 
FROM c 
WHERE usid = 2 
AND usrid NOT IN (SELECT usrid FROM c WHERE usid = 1) 

Если вы хотите оба USID значения должны быть динамичными, а также, при условии, что вам нужно сделать для последней USID для polard, это может быть что-то вроде

SELECT usrid 
FROM c 
WHERE usid = 
     SELECT MAX (usid) FROM b WHERE name = 'polard') 
AND usid NOT IN 
     (SELECT usrid FROM c WHERE usid = 
      SELECT MAX (usid) - 1 FROM b WHERE name = 'polard')) 

Это при условии, что Значения usid представляют собой целые приращивающие значения, специфичные для каждого umid в таблице b.

Если они arent, то это будет немного сложнее, так как вам нужно выполнить заказ и получить второе значение последнего umid

1

Вы можете использовать подзапрос с использованием NOT IN

следуя примера в http://www.dba-oracle.com/sql/t_subquery_not_in_exists.htm, вы можете сказать, дайте мне все друг идентификатора пользователя 2, а не в (друзьях идентификатора пользователя 1)