Запрос между двумя связанными таблицами - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть таблицы. Одно из них, user_profile, имеет поле с именем user_profile_id, а другая таблица, user_friend, имеет два поля с именами user_profile1_id и user_profile2_id (которые соответствуют FK для первой таблицы).

Я хочу проверить, есть ли пользователи в user_profile, которых нет в таблице user_friend, ни в user_profile1_id, ни в user_profile2_id. какой запрос я должен использовать!?

Ответы [ 4 ]

2 голосов
/ 24 февраля 2011

Прежде всего я предлагаю вам использовать циклический внешний ключ в user_profile_table, где внешний ключ ссылается на первичный ключ той же таблицы. Таким образом, вы сохраняете себя, создавая другую таблицу только для отношений между пользователями.

Однако, используя свой дизайн, вы можете использовать следующий запрос:

SELECT user_profile_id 
FROM user_profile A
 WHERE 
  NOT EXISTS(
      SELECT * FROM user_friends B 
       WHERE B.user_profile1_id=A.user_profile_id OR 
             B.user_profile2_id=A.user_profile_id
            )
1 голос
/ 24 февраля 2011

Попробуйте (это MSSQL, но в MySQL должно быть похоже)

select 
   *
from
   user_profile up
   left join user_friend uf
     on up.user_profile_id = uf.user_profile1_id
     or up.user_profile_id = uf.user_profile2_id
where
     coalesce(uf.user_profile1_id,uf.user_profile2_id) is null
1 голос
/ 24 февраля 2011

Попробуйте это


SELECT * FROM users
LEFT JOIN friends f1 ON (users.id = friends.uid)
LEFT JOIN friends f2 ON (users.id = friends.fid)
WHERE f1.uid IS NULL AND f2.uid IS NULL
0 голосов
/ 24 февраля 2011

Попробуйте:

SELECT user_profile_id 
FROM user_profile
WHERE 
  user_profile_id NOT IN (SELECT DISTINCT user_profile1_id FROM user_friend)
  AND user_profile_id NOT IN (SELECT DISTINCT user_profile2_id FROM user_friend)

Возможно, есть более эффективные запросы, но это должно сработать.

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