powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать все, кроме [значение X равно значению Y]
5 сообщений из 5, страница 1 из 1
Выбрать все, кроме [значение X равно значению Y]
    #38711303
smarton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно выбрать все значения X, кроме тех, которые равны значению Y в другой таблице .
Запрос формирую так:
Код: sql
1.
2.
3.
SELECT tb1.user_id, user_name, user_photo, tb2.like_user_id 
FROM users tb1, compare tb2 WHERE tb1.user_id != tb2.like_user_id
ORDER BY user_id


Использую "не равно"
Код: sql
1.
tb1.user_id != tb2.like_user_id 


но не получаю требуемый результат.
...
Рейтинг: 0 / 0
Выбрать все, кроме [значение X равно значению Y]
    #38711306
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smarton,

есть два варианта:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT tb1.user_id, user_name, user_photo
FROM users tb1
WHERE 
NOT EXISTS
(
select 1 from  compare tb2 where  tb1.user_id = tb2.like_user_id
)
ORDER BY user_id


или так называемый анти-жоинт

Код: sql
1.
2.
3.
4.
SELECT tb1.user_id, user_name, user_photo
FROM users tb1 LEFT JOIN compare tb2 ON tb1.user_id = tb2.like_user_id
WHERE tb2.like_user_id is null
ORDER BY user_id
...
Рейтинг: 0 / 0
Выбрать все, кроме [значение X равно значению Y]
    #38711451
smarton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbc, спасибо, два варианта отлично работают. Теперь буду знать, как делать подобный запрос.
Почитаю еще инструкции, чтобы лучше понимать принцип работы NOT EXISTS и LEFT JOIN.
Какой из вариантов правильнее использовать, какой дает меньше нагрузку или оба хороши?
...
Рейтинг: 0 / 0
Выбрать все, кроме [значение X равно значению Y]
    #38711503
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smartonjavajdbc, спасибо, два варианта отлично работают. Теперь буду знать, как делать подобный запрос.
Почитаю еще инструкции, чтобы лучше понимать принцип работы NOT EXISTS и LEFT JOIN.
Какой из вариантов правильнее использовать, какой дает меньше нагрузку или оба хороши?

нот езист -- понятнее, анти-хоинт -- как бы елегантнее.

В простейшем случае анти-жоинт будет делать тоже самое
что и нот-екзистс --- тупо перебирать записи одну-за-одной
и проверять наличие.
Возможно, при каких-нибудь условиях, анти-жоинт решит использовать
какие-нибудь более сложные (чем перебор) способы жоинта.
Будет ли быстрее -- не знаю.

В практическом плане -- чем гадать -- лучше протестировать оба
варината на конкретных данных на конкретном железе.
...
Рейтинг: 0 / 0
Выбрать все, кроме [значение X равно значению Y]
    #38711507
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbc,

маленькое замечание: NOT EXISTS ищет одну совпадающую запись, LEFT JOIN -все совпадающие. Всех может быть слишком много, соответственно выполняться будет изрядно дольше, т.к. фильтр применяется уже после отбора строк.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выбрать все, кроме [значение X равно значению Y]
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]