Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   ¿subquerys una duda? (https://www.clubdelphi.com/foros/showthread.php?t=76771)

JXJ 26-11-2011 05:38:19

¿subquerys una duda?
 
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
Código SQL [-]
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.

Código SQL [-]
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

Código Delphi [-]
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:
Código SQL [-]
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.

Código SQL [-]
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'


La franja horaria es GMT +2. Ahora son las 15:40:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi