Запрос MySQL — для отображения более высокой «зарплаты»

#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)