Question

J'ai les tables de base un et deux. Appelons-les tbl1 et tbl2.

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

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

Ensuite, il y a tbl3 qui a des clés étrangères qui le lient aux deux tables ci-dessus.

Le tableau 3 comporte deux champs de sélection: un qui interroge tbl1 et un autre qui interroge tbl2. Jusqu'ici tout va bien. Je combine les éléments de tbl1 et tbl2 dans tbl3.

Dans ce cas, la situation est la suivante: lorsque les utilisateurs remplissent tbl3, je souhaite que le select2 (correspondant aux données de tbl2) soit rechargé une fois que l'utilisateur a sélectionné un élément de tbl1. Pour quoi?

Disons que pour la première fois, l'utilisateur a choisi "pomme" pour remplir tbl3. à partir de tbl1 et "canapé" de tbl2. Lorsque l'utilisateur a sélectionné "apple", la deuxième liste déroulante a été rechargée avec les trois éléments en tant qu'options.

Maintenant, la deuxième fois que l'utilisateur remplit un formulaire tbl3, s'il sélectionne " pomme " encore une fois, il n’aura plus que 2 options. apple AND sofa ont déjà été cueillis. Les options maintenant ne sont plus que "table". et "chaise". S'il choisit "pomme" et " table " maintenant, l’option restante pour le premier élément " pomme " sera "chaise". Et ainsi de suite ...

Je ne peux pas penser à un SQL pour exécuter cette requête qui récupère des éléments de tbl2. Je dois utiliser l'élément sélectionné dans tbl1 et récupérer les éléments RESTANTS, ceux qui ne correspondent pas à un mach. Cette requête SQL est-elle possible? Je crois que oui, mais je ne peux pas penser à une issue.

Était-ce utile?

La solution

Je suppose que la table3 a des colonnes:

Utilisateur, ID Tbl1, ID Tbl2

Je suppose que vous souhaitez, pour l'utilisateur X, que les valeurs de tbl2 soient basées sur la sélection effectuée à partir de tbl1 qui ne figurent PAS dans le tableau 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>)
   )

Autres conseils

Si les liens sont définis par utilisateur:

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

Si les liens sont , ils sont établis par utilisateur pour:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top