首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在IN()-clause中使用子选择的-clause查询没有提供足够的结果

在IN()-clause中使用子选择的-clause查询没有提供足够的结果
EN

Stack Overflow用户
提问于 2020-09-23 13:08:47
回答 2查看 45关注 0票数 0

我构建了一个sql查询,但没有得到预期的结果。我试图解释我对sql-语句的步骤是什么。

首先,我有在in ()-clause中使用的子选择:

代码语言:javascript
复制
SELECT GROUP_CONCAT(job_id SEPARATOR ',') as job_ids
FROM candidate_job
WHERE candidate_id = 1111
GROUP BY candidate_id

结果是1,7,37,38,39,135,136,这正是我所期望的。然后,我在外部sql-语句中使用这些连接数字:

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT(user_id) SEPARATOR ',') as user_ids
FROM user_job
WHERE job_id IN (1,7,37,38,39,135,136)

这给了我139,539,1686,1759,这也正是我所期望的。

现在,我将这两个查询组合在一起,第一个查询是第二个查询的IN()-clause的子选择:

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT(user_id) SEPARATOR ',') as user_ids
FROM user_job
WHERE job_id IN (
    SELECT GROUP_CONCAT(job_id SEPARATOR ',') as job_ids
    FROM candidate_job
    WHERE candidate_id = 1111
    GROUP BY candidate_id
)

结果只有139,539,我不明白为什么不应该是139,539,1686,1759。

有人知道为什么会这样吗?在IN()中使用GROUP_CONCAT()列应该不是很少见,对吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-23 13:11:31

group_concat()为您提供了一个逗号分隔的字符串;将其作为操作数传递给运算符in并不能满足您的要求(它最终会搜索一个完全匹配的字符串)。

我推荐exists

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT(user_id) SEPARATOR ',') as user_ids
FROM user_job uj
WHERE EXISTS (
    SELECT 1
    FROM candidate_job cj
    WHERE cj.candidate_id = 1111 AND uj.job_id = cj.job_id
)
票数 1
EN

Stack Overflow用户

发布于 2020-09-23 13:24:35

运算符IN不使用逗号分隔值的字符串。

你想要的是FIND_IN_SET()

代码语言:javascript
复制
SELECT GROUP_CONCAT(DISTINCT user_id) as user_ids
FROM user_job
WHERE FIND_IN_SET(
        job_id,  
        (SELECT GROUP_CONCAT(job_id) FROM candidate_job WHERE candidate_id = 1111)
)

不需要SEPARATOR ',',因为','是默认分隔符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64028728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档