Domanda

Ho le tabelle di base una e due. Chiamiamoli tbl1 e tbl2.

tbl1
---------
1 - apple |
2 - orange |
3 - banana |
4 - pineapple

tbl2
---------
1 - table |
2 - chair |
3 - sofa |

Quindi c'è tbl3 che ha chiavi esterne che lo collegano ad entrambe le tabelle sopra.

Il modulo Tabella 3 ha due campi selezionati: uno che richiede tbl1 e un altro che richiede tbl2. Fin qui tutto bene. Combino elementi da tbl1 e tbl2 in tbl3.

Quindi ho la seguente situazione: quando gli utenti soddisfano tbl3, voglio che select2 (corrispondente ai dati da tbl2) venga ricaricato dopo che l'utente ha selezionato un elemento da tbl1. Per cosa?

Diciamo che per la prima volta soddisfacendo tbl3 l'utente ha scelto "apple" da tbl1 e "divano" da tbl2. Quando l'utente ha selezionato " apple " ;, il secondo elenco a discesa è stato ricaricato con tutti e 3 gli elementi come opzioni.

Ora, la seconda volta che l'utente compie un modulo tbl3, se l'utente seleziona "apple" di nuovo, ora avrà solo 2 opzioni. Apple e il divano sono stati scelti in precedenza. Le opzioni ora sono solo " tabella " e "sedia". Se sceglie "mela" e "tabella" ora, l'opzione rimanente per il primo articolo "apple" sarà "sedia". E così via ...

Non riesco a pensare a un SQL per eseguire questa query che prende elementi da tbl2. Devo usare l'elemento selezionato da tbl1 e in qualche modo afferrare gli oggetti rimanenti, quelli che non corrispondono a un mach. Questa query SQL è possibile? Credo di sì, ma non riesco a pensare a una via d'uscita.

È stato utile?

Soluzione

Suppongo che table3 abbia colonne:

Utente, Tbl1-ID, Tbl2-ID

Suppongo che tu voglia, per l'utente X, i valori per tbl2 basati sulla selezione fatta da tbl1 che NON è nella tabella 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>)
   )

Altri suggerimenti

Se i collegamenti sono per utente:

SELECT t.id,
       t.value
  FROM TABLE2 t
  JOIN TABLE3 t3 ON t3.id != t.id

Se i collegamenti sono sono per base utente per:

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top