использовать результат из подзапроса со списком, разделенным запятыми, в разделе IN основного запроса

У меня есть 2 таблицы: - одна (пользователи), содержащая инициалы для каждого пользователя в столбце с именем login - другая (taskplanned), содержащая те же инициалы в столбце с именем userId. Мне нужно выбрать всех пользователей из таблицы «пользователи», соответствующие критерию «техник», а затем мне нужно выбрать все задачи из запланированного задания, соответствующего этим пользователям.

Я построил следующий запрос:

SELECT
tp.*
FROM
taskplanned tp
WHERE
tp.userId IN (
    SELECT
        (
            GROUP_CONCAT(CONCAT('''', login, ''''))
        )
    FROM
        users u
    WHERE
        u.cis_role LIKE '%technician%'
)

При автономном запуске подзапроса он показывает следующее: 'BDG', 'FG', 'BJ', 'WDG', 'NDW', 'TV', 'SA', 'JV', 'GW', 'MU', KD, LV, KL, TDW, DK, KDS, PD, WB

Итак, я предполагаю, что при вставке этой части в клаусулу «IN» основного запроса она должна работать. К сожалению, это не так. Я что-то упустил?

Если я возьму результат из подзапроса и добавлю его вручную к основному запросу, он будет работать как шарм ..


person George    schedule 05.09.2017    source источник


Ответы (1)


GROUP_CONCAT () не требуется. Просто сделайте это так:

SELECT
tp.*
FROM
taskplanned tp
WHERE
tp.userId IN (
    SELECT
        login
    FROM
        users u
    WHERE
        u.cis_role LIKE '%technician%'
)

Когда это отношения один на один, лучший подход - присоединиться:

SELECT
tp.*
FROM
taskplanned tp
JOIN users u ON tp.userId = u.login
WHERE u.cis_role LIKE '%technician%'
person fancyPants    schedule 05.09.2017