在主查询的“IN”子句中使用逗号分隔列表的子查询结果
Posted
技术标签:
【中文标题】在主查询的“IN”子句中使用逗号分隔列表的子查询结果【英文标题】:use result from subquery with comma separated list in "IN" clausule of main query 【发布时间】:2018-02-13 18:10:48 【问题描述】:我有 2 张桌子: - 一个(用户)在名为 login 的列中包含每个用户的首字母 - 另一个(任务计划的)在名为 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”子句中插入这部分时,它应该可以工作。不幸的是,它不是。我在这里遗漏了什么吗?
如果我从子查询中获取结果并将其手动添加到主查询中,它就像一个魅力..
【问题讨论】:
【参考方案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%'
【讨论】:
【参考方案2】: mysql
SELECT *
FROM taskplanned
WHERE userId IN ( SELECT login FROM users WHERE cis_role LIKE '%technician%')
你不需要组连接..
【讨论】:
以上是关于在主查询的“IN”子句中使用逗号分隔列表的子查询结果的主要内容,如果未能解决你的问题,请参考以下文章
如何对查询中的字段进行编程,以在该记录的子数据表中显示逗号分隔的唯一值列表?