首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL多个were子句仅返回一个值

SQL多个were子句仅返回一个值
EN

Stack Overflow用户
提问于 2015-02-11 20:19:50
回答 1查看 84关注 0票数 0

我有三个表,我加入了一个基于dms_doc的doc_id。因此,每个文档可以有多个部门和合同(存储在另外两个表中,但这些表中的信息与此查询无关)。

代码语言:javascript
复制
dms_docs     dms_departments     dms_contracts
id           id                  id
             doc_id              doc_id
             dep_id              con_id

到目前为止,我有以下查询:

代码语言:javascript
复制
SELECT dms_docs.*, dms_departments.doc_id, dms_departments.dep_id, dms_contracts.doc_id, dms_contracts.con_id
FROM dms_docs 
JOIN dms_departments 
    ON dms_docs.id=dms_departments.doc_id
JOIN dms_contracts
    ON dms_docs.id=dms_contracts.doc_id
WHERE dep_id = 10
AND (con_id  = 1 OR con_id = 2)

因此,每个文档可以有多个合同(Con_id),每个文档可以有多个部门(Dep_id),上述查询产生的问题是,如果一个文档有多个合同和/或部门,它会多次返回该文档。

例如,在上面的查询中,一个文档属于合同1和合同2,因此它被返回2次。如果结果符合我传递给它的任何条件,我怎么能只返回一次结果呢?我猜我需要在这里的某个地方使用DISTINCT,但是我不确定如何正确地这样做。

EN

回答 1

Stack Overflow用户

发布于 2015-02-11 20:24:07

如果您只是想要文档信息,我建议您使用exists。但是,您也在请求来自其他表的信息。为此,请使用group bygroup_concat()

代码语言:javascript
复制
SELECT d.*, group_concat(distinct de.dep_id) as dep_ids,
       group_concat(distinct c.con_id) as con_ids
FROM dms_docs d JOIN
     dms_departments de
     ON d.id = de.doc_id JOIN
     dms_contracts c
     ON d.id = c.doc_id
WHERE dep_id = 10 AND (con_id IN (1, 2))
GROUP BY d.doc_id;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28454219

复制
相关文章

相似问题

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