Cuestión : Encontrando los fósforos múltiples adentro ensamblan y también tener expedientes del “nieto” en el t-SQL

considerar estas 3 tablas: tblFirstTable
(
FirstTablePK internacional no nulo,
FirstTableKeyA VARCHAR (2) no falta de información,
FirstTableKeyB VARCHAR (6) no falta de información,
FirstTableAltKeyA VARCHAR (2) no falta de información,
FirstTableAltKeyB VARCHAR (6) no falta de información,
FirstTableAltKeyC VARCHAR (1) no falta de información,
FirstTableAltKeyX VARCHAR (2) no falta de información,
FirstTableAltKeyY VARCHAR (6) no falta de información, tblSecondTable
(
SecondTablePK internacional no nulo,
SecondTableKeyA VARCHAR (2) no falta de información,
SecondTableKeyB VARCHAR (6) no falta de información de la tabla del

create de la tabla del

create del
FirstTableAltKeyZ VARCHAR (1) no falta de información,
), el

The del tblThirdTable
(
ThirdTablePK internacional no nulo,
SecondTableFK internacional no nulo, null
de la tabla del

create del
SecondTableAltKeyX VARCHAR (2) no falta de información,
SecondTableAltKeyY VARCHAR (6) no falta de información,
SecondTableAltKeyZ VARCHAR (1) no falta de información, FECHA Y HORA del
Update_When no nula,
Update_By VARCHAR (50) no nulos,
) del
AgentName VARCHAR (20) no) ensambla entre tblFirstTable y tblSecondTable es el on
FirstTableKeyA = SecondTableKeyA Y el =SecondTableKeyB

For de FirstTableKeyB cada uno de éstos ensambla, para cada los valores correspondientes {FirstTableAltKeyX, FirstTableAltKeyY, FirstTableAltKeyZ} del
there puede estar 1 o más valor adentro {SecondTableAltKeyX, SecondTableAltKeyY, SecondTableAltKeyZ}. Ésta es la llave condition.

I quisiera seleccionar solamente expedientes de tblFirsttable cuando la condición dominante antedicha es satisfied y también si hay expediente del niño para tblSecondTable en tblThirdTable.

Example:
tblFirstTable
1, “AA”, “BBBBBB”, “cc”, “DDDDDD”, “E”, “FF”, “GGGGGG”, “Br/>2 del H'<, “@@”, “######”, “$$”, “%%%%%%”, “^”, “&&”,” ', del ****** “(“
3, “QQ”, “WWWWWW”, “EE”, “RRRRRR”, “T”, “YY”, “UUUUUU”, “Br/>
tblSecondTable
10 del I'<, “AA”, “BBBBBB”, “II”, “JJJJJJ”, “K”, datetime, John
11, “AA”, “BBBBBB”,”, “MMMMMM”, “N”, datetime, Mary
12, “AA”, “BBBBBB”, “OO”, “PPPPPP”, “Q”, datetime, Joe
13, “@@”, “######”, "))”, “------¡”, “=”, datetime, Jim
14, “@@”, “######”, “~~”, “!!! ¡!!! ”, “; ”, el datetime, Jack
15, “QQ”, “WWWWWW”, “AA”, “SSSSSS”, el 'Br/>
tblThirdTable
20,11 del D'<, 'el Br/>21,12 del Racques'< de Miriam, 'el Br/>22,15 del Portes'< de Rogelio, 'el Br/>
*For “AA” del Penguert'< de Mike, “BBBBBB” en tblFirstTable, tenemos expedientes en tblSecondTable también, 3 de él. Tenemos tan fósforos múltiples. Éste es los criterios #1. Y por lo menos uno de ellos tiene un expediente del niño en tblThirdTable. Por lo tanto ambas condiciones satisfacen, y quisiéramos traer el expediente en tblFirstTable en el query.

*For “@@”, “######” en tblFirstTable, nosotros tenemos expedientes en tblSecondTable también, 2 de él. Tenemos tan fósforos múltiples. Éste es los criterios #1. Pero ningunos de ellos tienen expedientes del niño en tblThirdTable; porque los segundos criterios fallan, no tenemos que traer la fila de tblFirstTable.

*For “QQ”, “WWWWWW” en tblFirstTable, nosotros tenemos solamente un fósforo en tblSecondTable (ningunos fósforos del múltiplo). Aunque esto tiene un expediente del niño (los segundos criterios son satisfied), porque los primeros criterios no son satisfied, no traeremos la fila de tblFirstTable en el query.

how usted construiríamos el resultado deseado en el código t-SQL?.

thank you
class= del

Respuesta : Encontrando los fósforos múltiples adentro ensamblan y también tener expedientes del “nieto” en el t-SQL

Bien, pueden ser algunas estrategias como usted puede ver de antedicho…

Las relaciones subyacentes son resolved usar una base de (si necesitamos todos los detalles):

seleccionar T1.*, T2.*, T3.*
del T1 tblFirstTable
interno ensamblar el T2 tblSecondTable en T1.FirstTableKeyA = T2.SecondTableKeyA Y T1.FirstTableKeyB =T2.SecondTableKeyB
interno ensamblar el T3 tblThirdTable en T2.SecondTablePK = T3.SecondTableFK

-- En vista de que hay PK y FK asumimos la indexación de direcciones apropiada en ésos.
-- Así pues, razonable asumir la indexación de direcciones en las columnas de TableKeyA y de TableKeyB en sus tablas respectivas también.
-- Cuál significa que podemos ser razonablemente felices usar ensambla.
-- Pero necesitamos solamente realmente contadores… No detalles…

FirstTablePK selecto como FPK, cuenta (secondTablePK) como T2_count, cuenta (thirdTablePK) como T3_count  
del T1 tblFirstTable
interno ensamblar el T2 tblSecondTable en T1.FirstTableKeyA = T2.SecondTableKeyA Y T1.FirstTableKeyB =T2.SecondTableKeyB
interno ensamblar el T3 tblThirdTable en T2.SecondTablePK = T3.SecondTableFK
grupo de FirstTablePK
teniendo cuenta (secondTablePK) > 1

-- Nota, no tenemos que contar T3_count realmente, porque el internos ensamblan resolverán la existencia por lo menos de 1 entrada en tblThirdTable
-- y realmente, no tenemos que seleccionar T2_count porque tener cláusula hace esa cuenta para nosotros
-- Pero hacemos necesitamos los detalles, tenemos que conseguir así pues, detrás los datos tblFirstTable.

seleccionar *
de (seleccionar FirstTablePK como FPK  
      del T1 tblFirstTable
      interno ensamblar el T2 tblSecondTable en T1.FirstTableKeyA = T2.SecondTableKeyA Y T1.FirstTableKeyB =T2.SecondTableKeyB
      interno ensamblar el T3 tblThirdTable en T2.SecondTablePK = T3.SecondTableFK
      grupo de FirstTablePK
      teniendo cuenta (secondTablePK) > 1) s
interno ensamblar tblFirstTable en FPK = FirstTablePK

-- ahora, tenemos una subconsulta para nuestro contador y seleccionamos detrás el tblFirstTable
-- Así pues, podemos partir realmente hacia fuera elementos de esa subconsulta así que referimos solamente a las tablas una vez si es posible
-- y porque es un contador simple, podemos realmente tener esa parte como la subconsulta solamente.

seleccionar *
del T1 tblFirstTable
Donde 1 <�>           del T2 tblSecondTable
           interno ensamblar el T3 tblThirdTable en T2.SecondTablePK = T3.SecondTableFK
           donde T1.FirstTableKeyA = T2.SecondTableKeyA Y T1.FirstTableKeyB =T2.SecondTableKeyB)

-- pudo haber maneras adicionales de explorar, sino de pensar que da el mejor funcionamiento, y las deliberaciones/los pasos usados para conseguir a ese punto:)
Otras soluciones  
 
programming4us programming4us