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-ну запись с нулл
(
Доброе время суток.
чет не получаеться правильно составить запрос.... нужна помощь....
есть три табл:
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-ну запись с нулл
