запрос с выборкой с трех таблиц

kolyazdv

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

Доброе время суток.
чет не получаеться правильно составить запрос.... нужна помощь....


есть три табл:

1)
CREATE TABLE `dom2sotr` (
`Id` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`serv_dom` CHAR( 1 ) DEFAULT '0' NOT NULL ,
`dom_id` MEDIUMINT( 9 ) DEFAULT '0' NOT NULL ,
`user_id` MEDIUMINT( 9 ) DEFAULT '0' NOT NULL ,
PRIMARY KEY ( `Id` )
)
INSERT INTO `dom2sotr` (`Id`, `serv_dom`, `dom_id`, `user_id`) VALUES (1, '0', 16, 10) // dom_id связанно с `servers`.`Id`
// а serv_dom - это тока признак (сервер иль домен) 1 - сервер 0 - домен
2)
CREATE TABLE IF NOT EXISTS `servers` (
`Id` int(11) NOT NULL auto_increment,
`url` varchar(250) NOT NULL default '',
`root_login` varchar(100) NOT NULL default '',
`root_pwd` varchar(65) NOT NULL default '',
`name` varchar(150) NOT NULL default '',
PRIMARY KEY (`Id`)
)

3)
CREATE TABLE IF NOT EXISTS `users` (
`Id` int(11) NOT NULL auto_increment,
`name` varchar(200) NOT NULL default '',
`email` varchar(150) NOT NULL default '',
PRIMARY KEY (`Id`)
)

и нужно выбрать список сотрудников у которых еще нет доступа к серверу (по `servers`.`Id` поставил ради примера `5`)

вот что получилося по нижке :(

SELECT users.Id as user_id, users.`name`, `dom2sotr`.Id
FROM `servers`
LEFT JOIN `dom2sotr` on (`dom2sotr`.`user_id`=`users`.`Id`)
RIGHT JOIN users ON (`dom2sotr`.`dom_id` = `servers`.`Id` AND `dom2sotr`.`serv_dom` = 1)
WHERE `servers`.`Id` = `5`
HAVING ISNULL(`dom2sotr`.Id)
- так выдает ошибку :((

SELECT *
FROM `users`
LEFT JOIN `dom2sotr` on (`users`.`Id`=`dom2sotr`.`user_id`)
RIGHT JOIN servers ON (`dom2sotr`.`dom_id` = `servers`.`Id` AND `dom2sotr`.`serv_dom` = 1)
WHERE `servers`.`Id` = '5' HAVING ISNULL(`dom2sotr`.Id)
это что сам намудрил... но результат выдает
1-ну запись с нулл :((
 

Gas

может по одной?
[sql]
SELECT u.*
FROM `users`AS u
LEFT JOIN `dom2sotr`AS r ON u.id=r.user_id AND r.`serv_dom`=1 AND r.dom_id=5
WHERE r.id IS NULL
[/sql]
 

kolyazdv

Новичок
Пасибо большое... а то потратил уже почти 4-ре часа никак не получалося сделать проверку если не существует хоть одной записи
 

Gas

может по одной?
Хотя для баз отличных от mysql, кажется, предпочтительней вариант с not exists:
[sql]
SELECT u . *
FROM `users` AS u
WHERE NOT EXISTS (SELECT 1 FROM `dom2sotr` AS r ON u.id = r.user_id AND r.`serv_dom`=1 AND r.dom_id = 5)
[/sql]
 
Сверху