Desktop
Website
Multimedia
Database
Security
Enterprise
Pergunta : Encontrando os fósforos múltiplos juntam-se dentro e igualmente ter registros do “neto” no t-SQL
considerar estas 3 tabelas: tblSecondTable
da tabela do
create do tblFirstTable
da tabela do
create (
FirstTablePK int nao nulo,
FirstTableKeyA VARCHAR (2) nao nulos,
FirstTableKeyB VARCHAR (6) nao nulos,
FirstTableAltKeyA VARCHAR (2) nao nulos,
FirstTableAltKeyB VARCHAR (6) nao nulos,
FirstTableAltKeyC VARCHAR (1) nao nulo,
FirstTableAltKeyX VARCHAR (2) nao nulos,
FirstTableAltKeyY VARCHAR (6) nao nulos,
FirstTableAltKeyZ VARCHAR (1) nao nulo,
) (
SecondTablePK int nao nulo,
SecondTableKeyA VARCHAR (2) nao nulos, o
SecondTableKeyB VARCHAR (6) nao nulos, o
SecondTableAltKeyX VARCHAR (2) nao nulos, o
SecondTableAltKeyY VARCHAR (6) nao nulos, o
SecondTableAltKeyZ VARCHAR (1) nao nulo, o DATETIME do
Update_When nao nulo, o
Update_By VARCHAR (50) nao nulos, o
The do tblThirdTable
da tabela do
create do
) (
ThirdTablePK int nao nulo,
SecondTableFK int nao nulo, null
do
AgentName VARCHAR (20) não) juntam-se entre tblFirstTable e tblSecondTable é o on
FirstTableKeyA = SecondTableKeyA E o =SecondTableKeyB
For de FirstTableKeyB todos destes junta-se, para o cada valores correspondentes {FirstTableAltKeyX, FirstTa
bleAltKeyY
, FirstTabl
eAltKeyZ} do
there pode ser 1 ou mais valor dentro {SecondTableAltKeyX, Second
TableAltKe
yY, SecondT
ableAltKey
Z}. Esta é a chave condition.
I gostaria de selecionar somente registros de tblFirsttable quando a condição chave acima é satisfied e também se há um registro da criança para tblSecondTable em tblThirdTable.
Example:
tblFirstTable
1, “AA”, “BBBBBB”, “centímetro cúbico”, “DDDD
DD”, “E”, “F
F”, “GGGGGG
”, do “Br/>2 H'<, “@@”, “######”, “$$”, “%%%%
%%”, “^”, “&
&”,”
', do ****** “(“
3, “QQ”, “WWWWWW”, “EE”, “RRRR
RR”, “T”, “Y
Y”, “UUUUUU
”, do “Br/>
tblSecondTable
10 I'<, “AA”, “BBBBBB”, “II”, “JJJ
JJJ”, “K”, d
atetime, Jo
hn
11, “AA”, “BBBBBB”,”, “MMM
MMM”, “N”, d
atetime, Ma
ry
12, “AA”, “BBBBBB”, “OO”, “PPP
PPP”, “Q”, d
atetime, Jo
e
13, “@@”, “######”, "))”, “---
---”, “=”, d
atetime, Ji
m
14, “@@”, “######”, “~~”, “!!!
!!! ”, “; ”, o d
atetime, Ja
ck
15, “QQ”, “WWWWWW”, “AA”, “SSS
SSS”, 'o Br/>
tblThirdTable
20,11 do D'<, 'o Br/>21,12 do Racques'< de Miriam, 'o Br/>22,15 do Portes'< de Roger, 'o Br/>
*For “AA” do Penguert'< de Mike, “BBBBBB” em tblFirstTable, nós temos registros em tblSecondTable igualmente, 3 dele. Assim nós temos fósforos múltiplos. Este é os critérios #1. E pelo menos um deles tem um registro da criança em tblThirdTable. Daqui ambas as circunstâncias satisfazem, e nós gostaríamos de trazer o registro em tblFirstTable no query.
*For “@@”, “######” em tblFirstTable, nós temos registros em tblSecondTable igualmente, 2 dele. Assim nós temos fósforos múltiplos. Este é os critérios #1. Mas nenhuns deles têm registros da criança em tblThirdTable; porque os segundos critérios falham, nós não temos que trazer a fileira de tblFirstTable.
*For “QQ”, “WWWWWW” em tblFirstTable, nós temos somente um fósforo em tblSecondTable (nenhuns fósforos do múltiplo). Mesmo que isto tenha um registro da criança (os segundos critérios são satisfied), porque os primeiros critérios não são satisfied, nós não traremos a fileira de tblFirstTable no query.
how você construiríamos o resultado desejado no código t-SQL?.
thank you
class= do
Resposta : Encontrando os fósforos múltiplos juntam-se dentro e igualmente ter registros do “neto” no t-SQL
Bem, podem ser algumas estratégias como você pode ver de acima…
Os relacionamentos subjacentes são resolved using uma base de (se nós necessários todos os detalhes):
selecionar T1.*, T2.*, T3.*
do T1 tblFirstTable
interno juntar-se ao T2 tblSecondTable em T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB
interno juntar-se ao T3 tblThirdTable em T2.SecondTablePK = T3.SecondTableFK
-- Considerando que há PK e FK nós supor o índice apropriado naqueles.
-- Assim, razoável para supr também o índice nas colunas de TableKeyA e de TableKeyB em suas tabelas respetivas.
-- Qual significa que nós podemos estar razoavelmente felizes using junta-se.
-- Mas nós somente precisamos realmente contadores… Não detalhes…
FirstTablePK seleto como FPK, contagem (secondTablePK) como T2_count, contagem (thirdTablePK) como T3_count
do T1 tblFirstTable
interno juntar-se ao T2 tblSecondTable em T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB
interno juntar-se ao T3 tblThirdTable em T2.SecondTablePK = T3.SecondTableFK
grupo por FirstTablePK
tendo a contagem (secondTablePK) > 1
-- Nota, nós não temos que contar T3_count realmente, porque o internos se juntam resolverão a existência pelo menos de 1 entrada em tblThirdTable
-- e realmente, nós não temos que selecionar T2_count porque ter a cláusula faz essa contagem para nós
-- Mas nós fazemos precisamos detalhes, assim, temos que receber de volta os dados tblFirstTable.
selecionar *
de (selecionar FirstTablePK como FPK
do T1 tblFirstTable
interno juntar-se ao T2 tblSecondTable em T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB
interno juntar-se ao T3 tblThirdTable em T2.SecondTablePK = T3.SecondTableFK
grupo por FirstTablePK
tendo a contagem (secondTablePK) > 1) s
interno juntar-se a tblFirstTable em FPK = FirstTablePK
-- agora, nós temos um subquery para nosso contador e selecionamos para trás o tblFirstTable
-- Assim, realmente nós podemos rachar para fora elementos desse subquery assim que nós referimos somente tabelas uma vez se possível
-- e porque é um contador simples, nós podemos realmente ter essa parte como o subquery somente.
selecionar *
do T1 tblFirstTable
Onde 1 <�> do T2 tblSecondTable
interno juntar-se ao T3 tblThirdTable em T2.SecondTablePK = T3.SecondTableFK
onde T1.FirstTableKeyA = T2.SecondTableKeyA E T1.FirstTableKeyB =T2.SecondTableKeyB)
-- pôde haver umas maneiras adicionais de explorar, mas pensar que dá o melhor desempenho, e as deliberações/etapas usadas para começ a esse ponto:)
Outras soluções
Perguntas da entrevista do certificado de Shell da festança
lima de .vmdk
Como encontrar a contagem da fileira em Oracle DataReader em ASP.NET?
Excitador do bluetooth BCM2045 do inspiron 1720 de Dell para o profissional de Windows Xp.
Como conseguir o lightbox mostrar sobre a bandeira instantânea?
Fora do escritório o assistente que não trabalha w/Forwarding configurou
Redistribuindo o RASGO em subnets non-contiguous do OSPF.
líquidos de corpo após a sessão da natação
SQL0952N
Criando um vbscript para a chave do registro - IRPStackSize