我有三个表,我加入了一个基于dms_doc的doc_id。因此,每个文档可以有多个部门和合同(存储在另外两个表中,但这些表中的信息与此查询无关)。
dms_docs dms_departments dms_contracts
id id id
doc_id doc_id
dep_id con_id到目前为止,我有以下查询:
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,但是我不确定如何正确地这样做。
发布于 2015-02-11 20:24:07
如果您只是想要文档信息,我建议您使用exists。但是,您也在请求来自其他表的信息。为此,请使用group by和group_concat()
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;https://stackoverflow.com/questions/28454219
复制相似问题