0 votes

SELECT SQL avancé

J'ai les tableaux de base 1 et 2. 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 la tbl3 qui a des clés étrangères qui la relient aux deux tables ci-dessus.

Le formulaire de la Table 3 comporte deux champs de sélection : un qui interroge la tbl1 et un autre qui interroge la tbl2. Jusqu'à présent, tout va bien. Je combine les éléments de tbl1 et tbl2 dans tbl3.

Je me retrouve alors dans la situation suivante : Lorsque les utilisateurs remplissent la tbl3, je veux que le select2 (correspondant aux données de la tbl2) se recharge après que l'utilisateur ait choisi un élément de la tbl1. Pour quoi faire ?

Disons que pour la première fois, en remplissant la tbl3, l'utilisateur a choisi "pomme" dans la tbl1 et "sofa" dans la tbl2. Lorsque l'utilisateur a sélectionné "apple", la deuxième liste déroulante s'est rechargée avec les 3 éléments comme options.

Maintenant, la deuxième fois que l'utilisateur remplit un formulaire tbl3, s'il sélectionne à nouveau "pomme", il n'aura plus que 2 options. pomme ET canapé ont été choisis auparavant. Les options sont maintenant seulement "table" et "chaise". S'il choisit maintenant "pomme" et "table", l'option restante pour le premier élément "pomme" sera "chaise". Et ainsi de suite...

Je n'arrive pas à penser à un SQL pour exécuter cette requête qui saisit les éléments de tbl2. Je dois utiliser l'élément sélectionné dans tbl1 et saisir d'une manière ou d'une autre les éléments restants, ceux qui ne correspondent pas à une machine. Cette requête SQL est-elle possible ? Je pense que oui, mais je n'arrive pas à trouver une solution.

1voto

OMG Ponies Points 144785

Si les liens sont sur une base par utilisateur :

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

Si les liens sont sont basés sur une base 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

0voto

Degan Points 195

Je suppose que le tableau 3 a des colonnes :

Utilisateur, Tbl1-ID, Tbl2-ID

Je suppose que vous voulez, pour l'utilisateur X, les valeurs de la tbl2 basées sur la sélection faite dans la tbl1 qui ne sont PAS dans la table 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>)
   )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X