Como uno 3 sentencias SELECT en una sola sentencia

Tengo las siguientes 3 sentencias SELECT:
Primera Sentrencia:
SELECT
[RCAP_Munic_Edo Dtto Metropolitano].CodEstado,[RCAP_Munic_Edo Dtto Metropolitano].NombreEstado
FROM
[RCAP_Munic_Edo Dtto Metropolitano]
WHERE
CodEstado=!SelEstado.value;
Segunda Sentencia:
SELECT
[RCAP_Munic_Edo Miranda].CodEstado,[RCAP_Munic_Edo Miranda].NombreEstrado
FROM
[RCAP_Munic_Edo Miranda]
WHERE
CodEstado=!SelEstado.value;
Tercera Sentencia:
SELECT
[RCAP_Munic_Edo Vargas].CodEstado,[RCAP_Munic_Edo Vargas].NombreEstado
FROM
[RCAP_Munic_Edo Vargas]
WHERE
CodEstado=!SelEstado.value
NOTA:LA TABLA ESTADO contiene le campos CodEstado, NombreEstado y el noimbre del cuadro combinando Estado es selEstado
La pregunta:
Como unir 3 sentencias SELECT en una sola sentencia
He realizado los siguiente:
SELECT
[RCAP_Munic_Edo Dtto Metropolitano].CodEstado,[RCAP_Munic_Edo Dtto Metropolitano].NombreMunicipio,[RCAP_Munic_Edo Miranda].CodEstado;[RCAP_Munic_Edo Miranda].NombreMunicipio;[RCAP_Munic_Edo Vargas].CdoEstado,[RCAP_Munic_Edo Vargas].NombreEstado]
FROM
[RCAP_Munic_Edo Dtto Metropolitano],[RCAP_Mun_Edo Miranda],[RCAP_Muni_Edo Vargas]
WHERE
CodEstado=!SelEstado.value
Pero estas sentencias no me funciona, aun cuando en forma individual si
{"lat":8.05922962720019,"lng":-68.5546875}

2 respuestas

Respuesta
1
Utiliza UNION ALL para unirlas y, toda ella, la puedes manejar como otra consulta
SELECT CodEstado, NombreEstado
FROM (
SELECT
[RCAP_Munic_Edo Dtto Metropolitano].CodEstado,[RCAP_Munic_Edo Dtto Metropolitano].NombreEstado
FROM
[RCAP_Munic_Edo Dtto Metropolitano]
WHERE
CodEstado=!SelEstado.value
UNION ALL
SELECT
[RCAP_Munic_Edo Miranda].CodEstado,[RCAP_Munic_Edo Miranda].NombreEstrado
FROM
[RCAP_Munic_Edo Miranda]
WHERE
CodEstado=!SelEstado.value
UNION ALL
SELECT
[RCAP_Munic_Edo Vargas].CodEstado,[RCAP_Munic_Edo Vargas].NombreEstado
FROM
[RCAP_Munic_Edo Vargas]
WHERE
CodEstado=!SelEstado.value) AS SC
Por cierto... ¿que es ! SelEstado? Porque eso no funciona en una SQL...
Buenas Noche llodax
Gracias por la respuesta, ha sido muy interesante e instructiva.
No obtante, utilicé UNION ALL en la Primera y Segunda Sentencia y corren muy bien pero cuando UNI la Sentencia Tercera no me funciona.
Con relación a la pregunta ! ¿SelEstado? Se refiere al nombre del cuadro combinado Nº 1, tal como te lo menciono seguidamente. Pero si tiene alguna sugerencia mucho te lo agradecería porque estoy utilizando ACCESS 2003.
Generador de Consulta Nº 1:
Creamos un Cuadro Combinado Nº1, que llamaremos SelEstado para seleccionar los estados.
Con el botón derecho del Mouse seleccione propiedades y en:
a.- En la pestaña Datos se selecciona el campo Origen de la fila y escribimos:
1.- SELECT
[CodEstado],[NombreEstado]
FROM
[RCAP_Munic Dtto Metropolitano]
WHERE
[CodEstado]=Form!selEstado.Value
ORDER BY
[NombreEstado];
b.- En la pestaña Formato se selecciona el campo Número de columnas: y se coloca el número 2 (Estos indica la cantidad de columnas que se visualizará en el cuadro combinado)
c.- En la pestaña Datos se selecciona el campo Columna dependiente: y se coloca el número 1
(Este número la Indica a la Base de Datos que tome el valor del campo CodEstado que se encuentra en la columna 1º que hemos seleccionado en el origen de la fila).
d.-En la pestaña Eventos se selecciona el campo Al hacer clic luego presiona el botón de tres punto … y selecciona Generar Código y se escribe Me.Refresh (Esto actualiza el formulario).
Generador de Consulta Nº 2:
Creamos un Cuadro Combinado que llamaremos SelMunicipio para seleccionar los municipios.
Con el botón derecho del Mouse seleccione propiedades y en:
a.- En la pestaña Datos se selecciona el campo Origen de la fila y escribimos:
SELECT
[CodEstado],[NombreMunicipio]
FROM
[RCAP_Munic Dtto Metropolitano] WHERE
[CodEstado]=Form!selEstado.Value
ORDER BY
[NombreMunicipio];
UNION ALL SELECT
[CodEstado],[NombreMunicipio]
FROM
[RCAP_Munic_Edo Miranda] WHERE
[CodEstado]=Form!selEstado.Value
ORDER BY
[NombreMunicipio];
UNION ALL SELECT
[CodEstado],[NombreMunicipio]
FROM
[RCAP_Munic_Edo Vargas]
WHERE
[CodEstado]=Form!selEstado.Value ORDER BY
[NombreMunicipio];
b.- En la pestaña Formato se selecciona el campo Número de columnas: y se coloca el número 2 (Estos indica la cantidad de columnas que se visualizará en el cuadro combinado)
c.- En la pestaña Datos se selecciona el campo Columna dependiente: y se coloca el número 1
(Este número la Indica a la Base de Datos que tome el valor del campo CodMunicipio que se encuentra en la columna 1º que hemos seleccionado en el origen de la fila).
d.- En la pestaña Eventos se selecciona el campo Al hacer clic luego presiona el botón de tres punto … y selecciona Generar Código y se escribe Me.Refresh (Esto actualiza el formulario).
Tampoco hacia falta detallar tanto los pasos dados (algunos son irrelevantes para el problema).
Y, dado que aceptas sugerencias...
Parece que tienes una tabla de Estados y, después, una tabla de municipios para cada uno de os estados. No se hasta que punto puedes modificar esa estructura pero ya te digo que no es lo que podríamos llamar normalizada. Lo habitual es tener la tabla de Estados y una única tabla de Municipios dónde uno de sus campos sea el IdEstado.
De esa forma el tema se te simplifica enormemente.
Ahora bien, si no puedes cambiar esa estructura, deberás atacarlo tal y como te lo he indicado yo (con consulta de UNION) pero teniendo en cuenta algunas cosillas:
. Dado que es una SQL que pones directamente en el Origen de la fila, no puedes utilizar las referencias al formulario tal y com tu has hecho. Deberías utilizar Forms! Nombreformulario! Nombrecontrol
. Ya que el segundo cuadro depende de los seleccionado en el primero y entiendo que un municipio solo pertenece a un estado y que la selección se realiza de un único estado, la consulta de UNION carece de sentido puesto que dos de las tablas implicadas nunca contendrán registros a mostrar ya que sus municipios no constan en el estado seleccionado.
En ese caso yo sugiero crear la SQL del segundo cuadro combinado (selMunicipio) en el momento de seleccionar un estado y mediante VBA. De esa forma te ahorras trafico de datos innecesario. Eso si, la forma que propongo implica que, en la tabla de estados, se añada un campo que sea el nombre de la tabla que contiene los municipios (si es que no se puede obtener de otra forma)
Seria algo así. El origen de la fila del combo SelEstado:
SELECT
[CodEstado],[NombreEstado], [NombreTabla]
FROM
[RCAP_Munic Dtto Metropolitano]
WHERE
[CodEstado]=Form!selEstado.Value
ORDER BY
[NombreEstado];
Cambia la propiedad Numero de columnas a 3 y pon la tercera con un ancho 0
En el AfterUpdate de ese control:
Me!SelMunicipio.RowSource = "SELECT [CodEstado],[NombreMunicipio] FROM [" & Me!SelEstado.Column(2) & "] ORDER BY [NombreMunicipio];"
Prueba y cuentas.
Xavi
Buenos Dìas Xavi
Excelente tu ayuda, seguí tu orientación y procedí a normalizar las tablas, ahora en vez de 7 tablas únicamente tengo 3, (Estado, Municipio y Parroquia.
Los combox SelEstados y SelMunicipios funcionaron de maravillas.
Ademas te informo que procedí agregar un nuevo Combox llamado SelParroquia que seleccionará las Parroquias que pertenecen a los Municipios elegidos en el combox SelMunicipio.
Pero esta última incorporación me esta dando dolores de cabeza, porque aún cuando la información que contenie la pestaña Datos en el campo Origen de la fila es igual a la contenida en el combox SelMunicipio, con algunas variaciones, no logro hacer funcionar el combox SelParroquia. Ejemplo
COMBOX: SelMunicipio
SELECT
[NACION_Municipios].CodEstado,[NACION_Municipios].NombreMunicipio
FROM
[NACION_Municipios]
WHERE
[CodEstado]=Form!selEstado.value
ORDER BY
[NombreMunicipio];
COMBOX: SelParroquia
SELECT
[NACION_Parroquias].CodEstado,[NACION_Parroquias].NombreMunicipio
FROM
[NACION_parroquias]
WHERE
[CodParroquia]=Form!selMunicipio.value
ORDER BY
[NombreParroquia];
Si tienes alguna sugerencia al respecto, te lo agradezco.
Luis
Respuesta

Con el operador UNION

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas