Consulta con LEFT OUTER JOIN (2007-10-16)

16/10/2007 - 12:05 por Mauricio | Informe spam
Hola a todos,
tengo 2 tablas, en una guardo opciones de configuración de un
sistema y en la otra guardo los valores de esa configuraciones para los
distintos usuarios. Armé este query:
SELECT OPT_OPT_ID, 0, OPT_ID, OPT_TITLE, GROPT_VALUE
OPT_DEFAULT, OPT_GROUP, OPT_PICTURE, GROPT_USE_ID
FROM MCS_OPTIONS
LEFT JOIN MCS_GrpOptions ON OPT_ID = GROPT_OPT_ID ORDER BY OPT_ID
WHERE (GROPT_USE_ID = 1 OR GROPT_USE_ID IS NULL)

y me arroja 40 valores. Sin embargo, si el query es ahora:

SELECT OPT_OPT_ID, 0, OPT_ID, OPT_TITLE, GROPT_VALUE
OPT_DEFAULT, OPT_GROUP, OPT_PICTURE, GROPT_USE_ID
FROM MCS_OPTIONS
LEFT JOIN MCS_GrpOptions ON OPT_ID = GROPT_OPT_ID ORDER BY OPT_ID
WHERE (GROPT_USE_ID = 2 OR GROPT_USE_ID IS NULL)

el resultado es 41 filas. El problema es que para el usuario 2 tengo
definido un valor que no he definido para el usuario 1. La pregunta es,
entonces, cómo puedo traer para el usuario 1 los valores que ya han
sido definidos para él más las opciones de configuración que aún no
tienen valor asignado?

Muchas gracias desde ya.

Mauricio
Copenhague, Dinamarca

Mauricio
Copenhague, Dinamarca
 

Leer las respuestas

#1 Alejandro Mesa
16/10/2007 - 15:41 | Informe spam
Hola Mauricio,

No es la primera vez que posteas un mensaje en este grupo, asi que me
inmagino estes familiarizado con el. Recuerda que para este tipo de
preguntas, se recomienda se postee la estructura de las tablas, incluyendo
restricciones e indices, data de ejemplo en forma de sentencias "insert", y
el resultado esperado. La ayuda debe ser mutua.

Tirare una piedra. Trata de usar el operador FULL OUTER JOIN, para que
puedas traer la informacion de ambas tablas. No puedo pasar un ejemplo porque
no tengo idea de cuales son las columnas que pertenecen a cada tabla.

AMB

"Mauricio" wrote:

Hola a todos,
tengo 2 tablas, en una guardo opciones de configuración de un
sistema y en la otra guardo los valores de esa configuraciones para los
distintos usuarios. Armé este query:
SELECT OPT_OPT_ID, 0, OPT_ID, OPT_TITLE, GROPT_VALUE
OPT_DEFAULT, OPT_GROUP, OPT_PICTURE, GROPT_USE_ID
FROM MCS_OPTIONS
LEFT JOIN MCS_GrpOptions ON OPT_ID = GROPT_OPT_ID ORDER BY OPT_ID
WHERE (GROPT_USE_ID = 1 OR GROPT_USE_ID IS NULL)

y me arroja 40 valores. Sin embargo, si el query es ahora:

SELECT OPT_OPT_ID, 0, OPT_ID, OPT_TITLE, GROPT_VALUE
OPT_DEFAULT, OPT_GROUP, OPT_PICTURE, GROPT_USE_ID
FROM MCS_OPTIONS
LEFT JOIN MCS_GrpOptions ON OPT_ID = GROPT_OPT_ID ORDER BY OPT_ID
WHERE (GROPT_USE_ID = 2 OR GROPT_USE_ID IS NULL)

el resultado es 41 filas. El problema es que para el usuario 2 tengo
definido un valor que no he definido para el usuario 1. La pregunta es,
entonces, cómo puedo traer para el usuario 1 los valores que ya han
sido definidos para él más las opciones de configuración que aún no
tienen valor asignado?

Muchas gracias desde ya.

Mauricio
Copenhague, Dinamarca

Mauricio
Copenhague, Dinamarca



Preguntas similares