Domanda

È possibile effettuare una croce unire tra 2 tavoli, seguita da una sinistra a partecipare a una terza tabella, seguita da un join possibilmente più sinistro?Sto usando SQL Server 2000/2005.

Sto eseguendo la seguente query, che è piuttosto semplice IMO, ma ricevo un errore.

select  P.PeriodID,
        P.PeriodQuarter,
        P.PeriodYear,
        M.Name,
        M.AuditTypeId,
        A.AuditId
from Period P, Member M

LEFT JOIN Audits A 
ON P.PeriodId = A.PeriodId

WHERE 
    P.PeriodID > 29 AND P.PeriodID < 38
    AND M.AuditTypeId in (1,2,3,4)
order by M.Name
.

Sto ricevendo il seguente errore:

.

MSG 4104, Livello 16, stato 1, linea 1 L'identificatore multipart "p.periodid" non potrebbe essere vincolato.

Se rimuovo il join sinistro, la query funziona.Tuttavia, ho bisogno del join sinistro, poiché ci sono più informazioni che ho bisogno di tirare da altri tavoli.

Cosa sto facendo male?C'è un modo migliore per questo?

È stato utile?

Soluzione

Non è possibile combinare join impliciti ed espliciti - Vedi questo esempio in esecuzione .

Cross Joins dovrebbe essere usato così raramente usato in un sistema, che vorrei che ognuno sia esplicito per garantire che non sia chiaramente un errore di codifica o un errore di progettazione.

Se si desidera eseguire un join estero sinistro implicito, fai questo (non supportato su SQL Azure):

select  P.PeriodID,
        P.PeriodQuarter,
        P.PeriodYear,
        M.Name,
        M.AuditTypeId,
        A.AuditId
from #Period P, #Member M, #Audits A 
WHERE 
    P.PeriodID > 29 AND P.PeriodID < 38
    AND M.AuditTypeId in (1,2,3,4)
    AND P.PeriodId *= A.PeriodId
order by M.Name​
.

Altri suggerimenti

Hai dimenticato Cross Iscriviti nella tua query:

select  P.PeriodID,
        P.PeriodQuarter,
        P.PeriodYear,
        M.Name,
        M.AuditTypeId,
        A.AuditId
from Period P CROSS JOIN Member M

LEFT JOIN Audits A 
ON P.PeriodId = A.PeriodId

WHERE 
    P.PeriodID > 29 AND P.PeriodID < 38
    AND M.AuditTypeId in (1,2,3,4)
order by M.Name
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top