Inner Join ao contrário... como fazer??
Olá amigos!!
Tenho duas tabelas e preciso de fazer uma relação entre elas onde os códigos que estiverem em ambas não podem aparecer... somente os que estiverem em uma e não estiver em outra.
Qual a instrução em SQL para mysql 4.0 que eu tenho que fazer??
Desde já muito obrigado!!
Abraços a Todos
[color=green:32e1c496f3]Movido de Delphi para MySQL[/color:32e1c496f3]
Tenho duas tabelas e preciso de fazer uma relação entre elas onde os códigos que estiverem em ambas não podem aparecer... somente os que estiverem em uma e não estiver em outra.
Qual a instrução em SQL para mysql 4.0 que eu tenho que fazer??
Desde já muito obrigado!!
Abraços a Todos
[color=green:32e1c496f3]Movido de Delphi para MySQL[/color:32e1c496f3]
Btovix
Curtidas 0
Respostas
Dmalta
03/08/2006
Faça um [b:c55ab39659]FULL JOIN[/b:c55ab39659] entre as duas tabelas, de forma que todos os registros da tabela do lado esquerdo e da tabela do lado direito sejam exibidos, mesmo que não exista um match entre as linhas. Depois [b:c55ab39659]filtre[/b:c55ab39659] pela condição em que os valores da tabela do lado esquerdo sejam nulos, ou seja, quando não existe match da primeira tabela, [b:c55ab39659]ou[/b:c55ab39659] que os valores da tabela do lado direito sejam nulos, ou seja, quando não encontre a chave na segunda tabela.
Usando a sintaxe ANSI SQL:
Usando a sintaxe ANSI SQL:
[b]SELECT[/b] A.*, B.* [b]FROM[/b] A [b]FULL OUTER JOIN[/b] B [b]ON[/b] A.ID = B.ID [b]WHERE[/b] A.ID IS NULL [b]OR[/b] B.ID IS NULL
GOSTEI 0
Dmalta
03/08/2006
:!: Apenas retificando a formatação do código anterior:
SELECT A.*, B.* FROM A FULL OUTER JOIN B ON A.ID = B.ID WHERE A.ID IS NULL OR B.ID IS NULL
GOSTEI 0
Btovix
03/08/2006
Seguinte, a lógica é essa mesmo... mas eu tenho um problema com sintaxe, meu MySQL é a versão 4.0, ontem eu tive várias soluções mas para versões do MySQL mais novas que a que eu sou obrigado a usar...
se vc souber como resolver pra versão 4.0 ou mesmo um link pra eu dar uma olhada já vai ajudar bastante...
um abraço e muito obrigado pela ajuda!!
se vc souber como resolver pra versão 4.0 ou mesmo um link pra eu dar uma olhada já vai ajudar bastante...
um abraço e muito obrigado pela ajuda!!
GOSTEI 0
Dmalta
03/08/2006
OK, MySQL 4.0 não tem [b:8c096ec35c]FULL JOIN[/b:8c096ec35c], mas tem LEFT JOIN, certo? Então é só separar a consulta em duas partes usando [b:8c096ec35c]LEFT / RIGHT JOIN[/b:8c096ec35c] e um [b:8c096ec35c]UNION[/b:8c096ec35c] para juntar as partes:
O primeiro select pega as linhas de A que não existem em B e o segundo pegas as linhas de B que não existem em A.
Também pode-se usar os predicados (NOT) EXISTS e (NOT) IN, mas eu acho mais confuso.
Um abraço!
SELECT ´A´ AS Tabela, A.ID FROM A LEFT JOIN B ON A.ID = B.ID WHERE B.ID IS NULL UNION ALL SELECT ´B´ AS Tabela, B.ID FROM A RIGHT JOIN B ON A.ID = B.ID WHERE A.ID IS NULL
O primeiro select pega as linhas de A que não existem em B e o segundo pegas as linhas de B que não existem em A.
Também pode-se usar os predicados (NOT) EXISTS e (NOT) IN, mas eu acho mais confuso.
Um abraço!
GOSTEI 0