Выбрать несколько столбцов в подзапросе после предложения where - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь сравнить значение в один столбец с несколькими значениями в столбце, рядом с тем, где нижеприведенный пункт - моя проблема, как будто я хочу получить данные из пользовательских отделов 4 (IT_Infrase c) & 10 (финансы ), пожалуйста, научите меня, он говорит, что подзапрос должен иметь только один столбец, но я не знаю, как его решить

SELECT * FROM 
                        ( 
                        SELECT
                        chronos.chronos_id AS id
                        , chronos.dept_id AS dept_id
                        , chronos.name AS user_name
                        , departments.name AS department_name
                        , forms.formName AS form_name
                        , chronos.request_date AS date_requested
                        , chronos.status AS STATUS
                        FROM employees 
                        INNER JOIN users ON employees.user_id = users.id 
                        INNER JOIN departments ON employees.dept_id = departments.id 
                        INNER JOIN chronos ON users.name = chronos.name 
                        INNER JOIN forms on chronos.request_type_id = forms.id 
                        UNION ALL 
                        SELECT
                         leaves.leave_id AS id
                        , leaves.dept_id AS dept_id
                          , leaves.name AS user_name
                          , departments.name AS department_name
                          , forms.formName AS form_name
                          , leaves.request_date AS date_requested
                          , leaves.status AS STATUS
                          FROM employees 
                          INNER JOIN users ON employees.user_id = users.id
                          INNER JOIN departments ON employees.dept_id = departments.id 
                          INNER JOIN leaves ON users.name = leaves.name 
                          INNER JOIN forms on leaves.forms_id = forms.id 
                         UNION ALL 
                         SELECT
                          time_reserve.time_id AS id
                          , time_reserve.dept_id AS dept_id
                          , time_reserve.name AS user_name
                          , departments.name AS department_name
                         , forms.formName AS form_name
                          , time_reserve.request_date AS date_requested
                          , time_reserve.status AS STATUS
                          FROM employees 
                          INNER JOIN users ON employees.user_id = users.id 
                          INNER JOIN departments ON employees.dept_id = departments.id 
                          INNER JOIN time_reserve ON users.name = time_reserve.name 
                          INNER JOIN forms ON time_reserve.forms_id = forms.id
                         UNION ALL 
                         SELECT
                          offset.off_id AS id
                          , offset.dept_id AS dept_id
                          , offset.name AS user_name
                          , departments.name AS department_name
                          , forms.formName AS form_name
                          , offset.request_date AS date_requested
                          , offset.status AS STATUS
                          FROM employees 
                          INNER JOIN users ON employees.user_id = users.id 
                          INNER JOIN departments ON employees.dept_id = departments.id 
                          INNER JOIN offset ON users.name = offset.name 
                          INNER JOIN forms ON offset.forms_id = forms.id
                        ) t   where dept_id in 
                          (SELECT IT_Infrasec,Finance,Management,Business FROM mobile_access
                          INNER JOIN users 
                          ON users.id = mobile_access.userID 
                          WHERE users.username = 'username' ) ORDER BY date_requested DESC;

Ответы [ 2 ]

0 голосов
/ 18 марта 2020
where dept_id in 
              (SELECT IT_Infrasec FROM mobile_access
               INNER JOIN users 
               ON users.id = mobile_access.userID 
              WHERE users.username = 'username')

Примечание. В подзапросе предложения IN следует использовать только 1 столбец.

0 голосов
/ 18 марта 2020

Что не нравится mysql

where dept_id in 
              (SELECT IT_Infrasec,Finance,Management,Business FROM mobile_access
               INNER JOIN users 
               ON users.id = mobile_access.userID 
              WHERE users.username = 'username'

Ваш выбор возвращает 4 столбца, но допускается только один столбец.

Я не знаю, какой из них имеет требуемый dept_id, но вам нужно сгенерировать запрос, который возвращает только один столбец

Like

SELECT ID FROM mobile_access
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...