Как запросить / найти имя не друзей определенного пользователя из базы данных? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть 2 таблицы в базе данных: пользователи и друзья.Я хочу сделать запрос, который ищет имена пользователей, которые не дружат с определенным пользователем, используя @Query.Как должен выглядеть запрос?

Я создал этот запрос для него:

@Query("SELECT u.name FROM Users u WHERE u.user_id NOT IN
             (SELECT f.friend_id FROM Friend f WHERE f.user_id= ?1)
        AND u.name LIKE %?2% ", nativeQuery = true)
List<String> searchingNonFriendsByUserId(int userId, String search)

Но это не дает нужных результатов, которые я хочу.

Информация/ атрибуты таблиц:

Пользователи (user_id PK, имя, оценка)

Friend (id PK, user_id, friend_id)

ПРИМЕР ДЛЯ УТОЧНЕНИЯ :

ПОЛЬЗОВАТЕЛИ: (1, «тест», 5), (2, «Тим», 10), (5, «Том», 11), (4, «тест2», 13), (6, «Там», 0)

ДРУЗЬЯ: (1, 1, 2), (2, 1, 5), (3, 1, 4), (4, 2, 5), (5, 2, 1)

Я хочу имена (указанные в предложении LIKE) пользователей, не являющихся друзьями "Tim" (user_id = 2)например.Здесь Тим дружит с "Томом" и "тестом".Например, я набираю букву «T» между% предложения LIKE для user_id = 2, тогда я хочу, чтобы запрашивались только «Tam» и «test2».

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Использовать NOT EXISTS.

Выберите пользователей, которые не являются друзьями с данным идентификатором пользователя, исключив любого пользователя, у которого есть строка в таблице Friend, где существует данный пользователь (user_id =? 1) или наоборот.

SELECT u.name 
FROM Users u
WHERE NOT EXISTS (SELECT 1 FROM Friend
                  WHERE user_id = ?1 AND friend_id = u.user_id)
AND u.user_id != ?1
AND u.name LIKE '%?2%' 
0 голосов
/ 26 марта 2019

Можете ли вы попробовать это?

выберите имя пользователя из списка пользователей u там, где его нет (

Выберите User_id от друга, где user_id =? 1)

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