对我的SQL查询有疑问。它总是重复我的id,应该是唯一的

对我的SQL查询有疑问。它总是重复我的id,应该是唯一的,sql,oracle,Sql,Oracle,嗨,伙计们, 我对work进行了sql查询,但它多次复制了我的文档 select dokid, doktyp, kontakt_id, verkn_kontakt_id, relatie_id, onderwerp, dok_nam, dok_bes,betrag, belegnr, gjahr, TANR, old_vertrouw_id, erstellt_am, impuser, gebr_bew, docname from v_dok_xml inner joi

嗨,伙计们, 我对work进行了sql查询,但它多次复制了我的文档

select
  dokid, doktyp, kontakt_id, verkn_kontakt_id, relatie_id, 
  onderwerp, dok_nam, 
  dok_bes,betrag, belegnr, gjahr, TANR, old_vertrouw_id, 
  erstellt_am, impuser, gebr_bew, docname 
from v_dok_xml 
inner join corsa7.poststuk on poststuk_id=dokid 
inner join v_alle_dokumente on dok_id=dokid 
where doktyp in ('RECH','HY_DOK','HY_INT','IM_DOK','IM_INT',
                 'INT_SO','SONST_DOK','VB_DOK','VB_IN') 
  and BELEGNR is not null 
  and (GJAHR ='2018' or GJAHR is null) and rownum <=50
  and $where 
order by erstellt_am desc
选择
dokid,doktyp,kontakt_id,verkn_kontakt_id,relatie_id,
昂德韦尔普,多库南,
dok_bes、betrag、belegnr、gjahr、TANR、old_vertrouw_id、,
erstellt_am,不纯者,gebr_bew,文件名
来自v_dok_xml
内部连接corsa7.poststuk on poststuk_id=dokid
dok_id=dokid上的内部连接v_alle_dokumente
其中doktyp in('RECH','HY_DOK','HY_INT','IM_DOK','IM_INT',
‘INT_SO’、‘SONST_DOK’、‘VB_DOK’、‘VB_IN’)
并且BELEGNR不是空的

(GJAHR='2018'或GJAHR为null)和rownum这就是JOIN的工作方式。它们将一个表中的每一行匹配到相关表中的一行或多行。因此,当存在多个匹配项时,相同的行将多次显示。如何使dokid是唯一的查询?因为我需要加入到其他表中,所以您可以:1)确保使用一些复杂的谓词与相关表中最多一行匹配;或者2)您可以使用
groupby
dokid聚合行;在这种情况下,您需要在不直接依赖dokid的所有列上使用函数,如
MIN()
MAX()
,等等。这就是
JOIN
s的工作方式。它们将一个表中的每一行匹配到相关表中的一行或多行。因此,当存在多个匹配项时,相同的行将多次显示。如何使dokid是唯一的查询?因为我需要加入到其他表中,所以您可以:1)确保使用一些复杂的谓词与相关表中最多一行匹配;或者2)您可以使用
groupby
dokid聚合行;在这种情况下,您需要在不直接依赖dokid的所有列上使用函数,如
MIN()
MAX()
,等等。