PDA

Ver la Versión Completa : ¿subquerys una duda?


JXJ
26-11-2011, 05:38:19
hola tengo 2 tablas
una pedimentos que tiene informacion de los pedimentos realizados y un campo UCODADUANA
que uso como ancla. para llamar el nombre de la aduana[ADUANA] que esta en la tabla aduanas

CREATE TABLE PEDIMENTOS (
ID INTEGER NOT NULL,
RFC_PERTENECE_EMPRESA VARCHAR(30),
CODIGO VARCHAR(30),
UCODADUANA CHAR(50),
PEDIMENTONUM CHAR(100),
PEDIMENTOFECHA TIMESTAMP,
STATUS INTEGER,
/* Keys */
CONSTRAINT PK_PEDIMENTOS
PRIMARY KEY (ID)
);


CREATE TABLE ADUANAS (
ID INTEGER NOT NULL,
RFC_PERTENECE_EMPRESA VARCHAR(30),
CODIGO VARCHAR(30),
ADUANA CHAR(50),
STATUS INTEGER,
/* Keys */
CONSTRAINT PK_ADUANAS
PRIMARY KEY (ID)
);


y este query lo uso para unir el pedimento por si codigo unico
con el nombre de la aduana. y funciona.

SELECT PEDI.ID, PEDI.RFC_PERTENECE_EMPRESA, PEDI.CODIGO, PEDI.UCODADUANA, PEDI.PEDIMENTONUM, PEDI.PEDIMENTOFECHA,PEDI.STATUS,
(SELECT ADU.ADUANA FROM ADUANAS ADU WHERE ADU.CODIGO = PEDI.UCODADUANA AND
ADU.RFC_PERTENECE_EMPRESA = 'NWM9709244W4' )
FROM
PEDIMENTOS PEDI
where
PEDI.RFC_PERTENECE_EMPRESA = 'NWM9709244W4'
and
PEDI.CODIGO = 'NWMPEDIMENTOS0003'

mi problema es que no entiendo bien si un subquery,
solo puede mostrar 1 campo

(SELECT ADU.ADUANA FROM ADUANAS
o acepta mas con mas campos, me da error.


(SELECT ADU.ADUANA, ADU.CODIGO, ADU.STATUS


Engine Error (code = 335544569):
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
count of column list and variable list do not match.

SQL Error (code = -104):
Invalid token.


no entiendo a que lista de columna no ajusta
count of column list and variable list do not match.

gracias. por su tiempo.

olbeup
26-11-2011, 14:01:06
No puedes poner más de un campo en la Subconsulta para mostrar un campo, efectivamente te da error, porque es erroneo lo que has puesto, y el motor de SQL protesta y con razón.

Prueba con esto:
SELECT
PEDI.ID
,PEDI.RFC_PERTENECE_EMPRESA
,PEDI.CODIGO AS CODIGOPEDI
,PEDI.UCODADUANA
,PEDI.PEDIMENTONUM
,PEDI.PEDIMENTOFECHA
,PEDI.STATUS
,ADU.ADUNA
,ADU.CODIGO AS CODIGOADU
,ADU.STATUS
FROM Pedimentos AS PEDI
INNER JOIN Aduanas AS ADU
ON ADU.CODIGO = PEDI.CODIGO
WHERE PEDI.RFC_PERTENECE_EMPRESA = 'NWM9709244W4'
AND PEDI.CODIGO = 'NWMPEDIMENTOS0003'

guillotmarc
26-11-2011, 14:46:56
Hola.

La solución que te han dado es la más eficiente para este problema. Pero si por alguna razón prefieres las subconsultas a enlazar tablas, entonces solo tienes que poner 3 subconsultas, en lugar de una sola, y en cada subconsulta devuelves uno de los campos que necesitas.

Saludos.

JXJ
26-11-2011, 18:05:30
super.. muchas gracias a ambos. olbeup y guillotmarc.

areglada la aquery sale asi.


SELECT
PEDI.ID
,PEDI.RFC_PERTENECE_EMPRESA
,PEDI.CODIGO AS CODIGOPEDI
,PEDI.UCODADUANA ,PEDI.PEDIMENTONUM
,PEDI.PEDIMENTOFECHA
,PEDI.STATUS
,ADU.ADUANA
,ADU.CODIGO AS CODIGOADU
,ADU.STATUS
FROM Pedimentos AS PEDI
INNER JOIN Aduanas AS ADU
ON ADU.CODIGO = PEDI.UCODADUANA
WHERE PEDI.RFC_PERTENECE_EMPRESA = 'NWM9709244W4'
AND PEDI.CODIGO = 'NWMPEDIMENTOS0003'