Pregunta

Tengo tablas básicas uno y dos. Llamémoslos tbl1 y tbl2.

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

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

Luego está tbl3 que tiene claves foráneas que lo vinculan a las dos tablas anteriores.

El formulario de la Tabla 3 tiene dos campos de selección: uno que consulta tbl1 y otro que consulta tbl2. Hasta ahora tan bueno. Combino elementos de tbl1 y tbl2 en tbl3.

Entonces tengo la siguiente situación: cuando los usuarios cumplen tbl3, quiero que select2 (correspondiente a los datos de tbl2) se vuelva a cargar después de que el usuario haya elegido un elemento de tbl1. ¿Para qué?

Digamos que por primera vez cumpliendo tbl3 el usuario ha elegido "apple" desde tbl1 y "sofá" de tbl2. Cuando el usuario seleccionó '' manzana '', la segunda lista desplegable se volvió a cargar con los 3 elementos como opciones.

Ahora, la segunda vez que el usuario completa un formulario tbl3, si el usuario selecciona " apple " de nuevo, ahora solo tendrá 2 opciones. La manzana Y el sofá han sido recogidos antes. Las opciones ahora son solo " tabla " y "silla". Si elige "manzana" y "mesa" ahora, la opción restante para el primer elemento '' manzana '' será "silla". Y así sucesivamente ...

No puedo pensar en un SQL para ejecutar esta consulta que toma elementos de tbl2. Debo usar el elemento seleccionado de tbl1 y de alguna manera agarrar los elementos RESTANTES, aquellos que no corresponden a una máquina. ¿Es posible esta consulta SQL? Creo que sí, pero no puedo pensar en una salida.

¿Fue útil?

Solución

Supongo que table3 tiene columnas:

Usuario, Tbl1-ID, Tbl2-ID

Supongo que desea, para el usuario X, los valores de tbl2 basados ??en la selección hecha de tbl1 que NO están en la tabla 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>)
   )

Otros consejos

Si los enlaces son por usuario:

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

Si los enlaces son son por usuario 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top