Pergunta
Eu tenho tabelas básicas um e dois. Let`s chamá-los TBL1 e tbl2.
tbl1
---------
1 - apple |
2 - orange |
3 - banana |
4 - pineapple
tbl2
---------
1 - table |
2 - chair |
3 - sofa |
Depois, há tbl3 que tem chaves estrangeiras que apontam para ambas as tabelas acima.
Tabela 3 formulário tem dois campos selecionados: uma que consultas tbl1 e outro que as consultas tbl2. Por enquanto, tudo bem. I combinar itens de tbl1 e tbl2 em tbl3.
Então eu tenho a seguinte situação: Quando os usuários cumprir tbl3, eu quero o select2 (correspondendo a dados de tbl2) para recarregar depois que o usuário escolheu um item tbl1. Para quê?
Let`s dizer que, pela primeira vez cumprindo tbl3 o usuário escolheu "maçã" de tbl1 e "sofá" de tbl2. Quando o usuário selecionado "maçã", o segundo dropdownlist recarregado com todos os 3 itens como opções.
Agora, a segunda vez que o usuário preenche um formulário tbl3, se o usuário selecionar "maçã" de novo, ele terá agora apenas 2 opções. Apple e sofá foram colhidas antes. Opções agora são apenas "mesa" e "cadeira". Se ele pega "maçã" e "mesa" agora, a opção restante para o primeiro artigo "maçã" será "cadeira". E assim por diante ...
Eu não posso pensar de um SQL para executar essa consulta que agarra elementos de tbl2. Devo usar o elemento selecionado a partir tbl1 e de alguma forma pegar os itens restantes, aqueles que não correspondem a um mach. É este possibe consulta SQL? Eu acredito que sim, mas não posso pensar de uma maneira para fora.
Solução
Eu estou supondo que table3 tem colunas:
Usuário, Tbl1-ID, tbl2-ID
Eu estou supondo que você quer, para o usuário X, os valores para tbl2 com base no selecton feita a partir de tbl1 que não estão na tabela 3.
SELECT ID, Value
FROM tbl2
WHERE tbl2.ID NOT IN (
SELECT Tbl2-ID
FROM Table3
WHERE (User = <this user>) AND (Tbl1-ID = <selected tbl1 ID>)
)
Outras dicas
Se as ligações estão em uma base por usuário:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id
Se as ligações está são por base de usuário para:
SQL Server:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = @userId
Oracle:
SELECT t.id,
t.value
FROM TABLE2 t
JOIN TABLE3 t3 ON t3.id != t.id AND t3.userid = :userId