这个查询:
select distinct a.id, a.caminho, c.indexObr, d.id, d.tamanho, d.mask, d.idName
from gedaidb.dbo.sistema_Documentos as a
join gedaidb.dbo.sistema_DocType as b on a.idDocType = b.id
join gedaidb.dbo.sistema_DocType_Index as c on b.id = c.docTypeId
join gedaidb.dbo.sistema_Indexes as d on c.indexId = d.id
join gedaidb.dbo.sistema_Indexacao as e on a.id = e.idDocumento
where a.id = 97
返回此结果集:
id caminho indexObr id tamanho mask idName
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 25 10 NULL Numérico
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 26 10 NULL AlfaNumérico
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 1 24 10 NULL Caracter
现在如果我在查询中添加 e.valor :
select distinct a.id, a.caminho, c.indexObr, d.id, d.tamanho, d.mask, d.idName, e.valor
from gedaidb.dbo.sistema_Documentos as a
join gedaidb.dbo.sistema_DocType as b on a.idDocType = b.id
join gedaidb.dbo.sistema_DocType_Index as c on b.id = c.docTypeId
join gedaidb.dbo.sistema_Indexes as d on c.indexId = d.id
join gedaidb.dbo.sistema_Indexacao as e on a.id = e.idDocumento
where a.id = 97
我得到了返回的那些行:(唯一的额外列是最后一个,勇气)
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 25 10 NULL Numérico 11111
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 25 10 NULL Numérico aaaa111
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 25 10 NULL Numérico ccccc
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 26 10 NULL AlfaNumérico 11111
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 26 10 NULL AlfaNumérico aaaa111
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 0 26 10 NULL AlfaNumérico ccccc
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 1 24 10 NULL Caracter 11111
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 1 24 10 NULL Caracter aaaa111
97 C:\Users\Guilherme\Desktop\Guilherme\Tipo 3\SkypeSetup.exe 1 24 10 NULL Caracter ccccc
所有加入的表都有 1-N 关系,据我所知,如果没有 NN 关系,我不应该得到那些额外的行
这个问题背后的理论是什么?