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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top