Salve a tutti!

Scenario del problema:
ho 2 tabelle legate 1 a N su un campo ID (di nome uguale per entrambe le tabelle) il cui legame è opzionale dal lato 1 (ci sono elementi dal lato 1 che non hanno elementi dal lato N)

Problema:
io dovrei generare un listato con le informazioni relative alle due tabelle: sotanzialmente devo fare un left join di 1 su N (in modo da prendere tutti gli elementi di 1 anche se non ci sono elementi legati in N), però, nel caso ci siano elementi nel lato N, mi occorre solo il primo degli elementi legati.
facendo un left join standard (attualmente: SELECT * FROM A LEFT JOIN B ON A.id=B.id ) mi vengono ritornati:
* gli elementi di 1 senza legami in N (OK)
* gli elementi di 1 legati al primo elemento in N (OK)
* gli elementi di 1 legati uno ad uno con tutti gli altri elementi legati in N (NO!)
io dovrei eliminare quest'ultima categoria di risultati...
esiste un modo in SQL per farlo??

Grazie a tutti!!

--> ZyRix 1st <--
66 messaggi dal 09 febbraio 2005
ZyRix1st ha scritto:
Salve a tutti!

Scenario del problema:
ho 2 tabelle legate 1 a N su un campo ID (di nome uguale per entrambe le tabelle) il cui legame è opzionale dal lato 1 (ci sono elementi dal lato 1 che non hanno elementi dal lato N)

Problema:
io dovrei generare un listato con le informazioni relative alle due tabelle: sotanzialmente devo fare un left join di 1 su N (in modo da prendere tutti gli elementi di 1 anche se non ci sono elementi legati in N), però, nel caso ci siano elementi nel lato N, mi occorre solo il primo degli elementi legati.
facendo un left join standard (attualmente: SELECT * FROM A LEFT JOIN B ON A.id=B.id ) mi vengono ritornati:
* gli elementi di 1 senza legami in N (OK)
* gli elementi di 1 legati al primo elemento in N (OK)
* gli elementi di 1 legati uno ad uno con tutti gli altri elementi legati in N (NO!)
io dovrei eliminare quest'ultima categoria di risultati...
esiste un modo in SQL per farlo??

Grazie a tutti!!

Ciao,
nell'ipotesi che il campo PK_TabB sia la PK della tabella B,
puoi provare con una frase Sql come segue :

select Q.*, B.* from
(select  A.*,
(select top 1 PK_TabB from B
  where [ID] = A.[ID]
  order By [ID] ) AS PK_TabB
from A
)  Q
Left join B
on Q.PK_TabB=B.PK_TabB


P.S. 1
non l'ho provata.

P.S. 2
nota che la scelta del top 1 l'ho arbitrariamente impostata in base all' order by ID

Ciao sspintux
Modificato da sspintux il 29 agosto 2006 11.28 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.