выбрать не связанные записи из связанных таблиц

martinelli

Новичок
выбрать не связанные записи из связанных таблиц

есть две связанные таблицы
1) users с полями us_id, us_name
2) group с полями gr_id, gr_usid
в gr_usid лежат номера юзеров us_id, в ходящих в группу с номером gr_id.
мне надо из users выбрать всех юзеров, не вошедших ни в одну группу.
Я пробовал запрос:
PHP:
select us_name from users left join group on us_id=gr_usid where gr_id=null
но он мне вернул ноль записей, хотя это не так.
Что я делаю не так? Как правильно надо написать запрос?
 

sokol

Zavolga.Net
Не проще
SELECT * FROM users WHERE us_id NOT IN (SELECT DISTINCT gr_usid FROM group)

Это в качестве идеи. Работоспособность не проверял.

И вобще для связи пользовать-группы, лучше делать три таблицы и связь многие-ко-многим.
 

martinelli

Новичок
Не проще
SELECT * FROM users WHERE us_id NOT IN (SELECT DISTINCT gr_usid FROM group)
может и проще, но у меня стоит не самый свежий MYSQL он SELECT DISTINCT воспринимать не хочет
И вобще для связи пользовать-группы, лучше делать три таблицы и связь многие-ко-многим.
да у меня таблиц конечно больше чем две, я привел в качестве примера необходимый минимум, чтобы принцип такого отбора понять
 

pnt

Guest
Я пытаюсь получить страницы, id которых нет в другой таблице, но пулучаю 0.
mysql 3.23.49.
Какая ошибка в моем запросе?

$query = "
select "
.$block."_pages.subj_id
from "
.$block."_pages
left join "
.$block."_stat
on "
.$block."_pages.subj_id="
.$block."_stat.subj_id
where "
.$block."_stat.subj_id is null
";
 

martinelli

Новичок
когда джоинишь туже таблицу обзови ее как-нибудь иначе, например :
PHP:
select * from table left join table as table1 on ....
 

martinelli

Новичок
pnt
Пожалуй я тебе дал не правильный совет. Не сразу въехал в твой запрос. твои $block сбили меня с толку.
По идее запрос у тебя написан правильно (лучше бы посмотреть что по echo получиться), может просто нет отвечающих условию записей?
 

webxtor

Новичок
А не пробовал ты взять скажем для юзера 1 те группы, в которые он не входит? У меня не получается никак одним запросом :(
 

chira

Новичок
martinelli
такой запрос должен работать:
[SQL]
select us_name
from users u left join group g on u.us_id=g.gr_usid
where g.gr_id IS NULL
[/SQL]
 

webxtor

Новичок
chira
А как на счет моего вопроса? Как для данного юзера взять те группы, в которые он не входит?
 

chira

Новичок
webxtor
предполагаю, что существует таблица со списком групп, я её назвал group_list
тогда для юзера с id=1 будет такой запрос:
[SQL]
SELECT us_name
FROM group_list l
LEFT JOIN group g ON l.id = g.gr_id AND g.gr_usid = 1
WHERE g.gr_id IS NULL
[/SQL]
 
Сверху