#mysql #sql
#mysql #sql
Вопрос:
У меня есть 5 таблиц: таблица сотрудников, таблица компании, таблица работ, таблица управления и зависимая таблица. Итак, я хочу перечислить сведения о сотруднике и его менеджерах, где зарплата сотрудников больше, чем зарплата менеджеров
Где мои таблицы выглядят следующим образом:
//employee table
`Employee` (
`Ename` VARCHAR( 25 ) NOT NULL (primary key) ,
`Street` VARCHAR( 40 ) NOT NULL ,
`City` VARCHAR( 20 ) NOT NULL ,
`joining_date` DATE NOT NULL ,
`gender` VARCHAR( 7 ) NOT NULL ,
PRIMARY KEY ( `Ename` )
) ENGINE = MYISAM ;
//company table
`Company` (
`Cname` VARCHAR( 25 ) NOT NULL ,
`city` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `Cname` )
) ENGINE = MYISAM ;
//works table
`Works` (
`ename` VARCHAR( 25 ) NOT NULL ,
`cname` VARCHAR( 25 ) NOT NULL (foreign key),
`salary` INT( 50 ) NOT NULL ,
PRIMARY KEY ( `ename` )
) ENGINE = MYISAM ;
//manages table
`Manages` (
`empname` VARCHAR( 25 ) NOT NULL ,
`manager_name` VARCHAR( 25 ) NOT NULL
) ENGINE = MYISAM ;
here ename and manager name is composite key
//dependent table
employee_dependent(
employee_name VARCHAR(15) NOT NULL(foreign key),
dependent_name VARCHAR(25) NOT NULL,
relation VARCHAR(25) NOT NULL,
gen VARCHAR(25) NOT NULL,
PRIMARY KEY(dependent_name)
);
Комментарии:
1. Обратите внимание, что ’50’ в ‘INT(50)’ — бессмысленная концепция
2. Да, конечно, я изменю это значение INT (50)
Ответ №1:
Вы можете написать свой запрос следующим образом, чтобы узнать, где зарплата сотрудников больше, чем зарплата менеджеров.
Вам нужно присоединиться к employee и работает два раза, один для employee и один для manager.
SELECT e.*,m.Ename as manager,
FROM Employee e
INNER JOIN Manages rel on e.ename = rel.empname
INNER JOIN Employee m on m.ename = rel.manager_name
INNER JOIN Works we on we.ename=e.empname
INNER JOIN Works wm on wm.ename=m.empname
WHERE we.salary > wm.salary
Комментарии:
1. мой голос, если определенно нет -1, был по ошибке, и я не могу его отменить
2. Вы должны быть в состоянии сделать это сейчас, поскольку я отредактировал ответ.
3. Этого не происходит, я попробовал еще раз. Ничего страшного, забудьте. Спасибо вам за ваш ответ, хотя
4. @PSK я поддержу этот ответ, поскольку несправедливо иметь отрицательный балл
5. @Aadi это не ты проголосовал против, поскольку у тебя нет необходимой репутации (125)