2012-05-08 12 views
35

Quiero unir dos tablas CUSTMR y DEPRMNT.Cómo escribir una subconsulta dentro de la declaración OUTER JOIN

Mi necesaria es: LEFT OUTER JOIN de dos o más tablas con subconsulta dentro de la Unión externa izquierda como se muestra a continuación:

Tabla: CUSTMR, DEPRMNT

Resultados por:

SELECT 
    cs.CUSID 
    ,dp.DEPID 
FROM 
    CUSTMR cs 
     LEFT OUTER JOIN (
      SELECT 
        dp.DEPID 
        ,dp.DEPNAME 
       FROM 
        DEPRMNT dp 
       WHERE 
        dp.DEPADDRESS = 'TOKYO' 
     ) 
      ON (
       dp.DEPID = cs.CUSID 
       AND cs.CUSTNAME = dp.DEPNAME 
      ) 
WHERE 
    cs.CUSID != '' 

Aquí la subconsulta es:

SELECT 
    dp.DEPID, dp.DEPNAME 
FROM 
    DEPRMNT dp 
WHERE 
    dp.DEPADDRESS = 'TOKYO' 

¿Es posible escribir tales inscripciones? ide IZQUIERDA OUTER JOIN?

Recibo un error al ejecutar esta consulta en mi base de datos DB2.

+4

Siempre debe publicar el ErrorMessage que recibe. –

+0

¿Por qué el título dice INNER JOIN y la pregunta dice OUTER JOIN ?? ... Estoy editando esto –

Respuesta

63

Necesita la "id de correlación" (la cosa "AS SS") en la selección secundaria para hacer referencia a los campos en la condición "ENCENDIDO". Los id asignados dentro de la selección secundaria no se pueden usar en la unión.

SELECT 
     cs.CUSID 
     ,dp.DEPID 
FROM 
    CUSTMR cs 
     LEFT OUTER JOIN (
      SELECT 
        DEPID 
        ,DEPNAME 
       FROM 
        DEPRMNT 
       WHERE 
        dp.DEPADDRESS = 'TOKYO' 
     ) ss 
      ON (
       ss.DEPID = cs.CUSID 
       AND ss.DEPNAME = cs.CUSTNAME 
      ) 
WHERE 
    cs.CUSID != '' 
+1

¡Sí! "James Anderson", muchas gracias. Mi problema fue resuelto Encontré que mi problema se debía al nombre de alias. ** ¡La consulta de Sub interna siempre debe tener un nombre de alias! ** – YROjha

+0

¿Es esta una subconsulta correlacionada, y por lo tanto termina siendo un mal rendimiento? – Abdul

+0

"Rendimiento" depende por completo de los índices disponibles, memoria disponible, asignación dsik física, cardinalidad, cuánto dinero pagó por el software, etc. etc. Tener el SQL sintácticamente correcto es solo un punto de partida. –

0

creo que no tiene que utilizar sub consulta en este scenario.You puede directamente externa izquierda de la mesa DEPRMNT.

Durante el uso de combinación externa izquierda, no utilice las columnas en la tabla del lado derecho de la unión en el estado en el que, se obtendrá la salida equivocada

+1

. De hecho, en mi lógica de negocios, la subconsulta tiene un grupo por usado, ¡en ese momento necesitábamos escribir una subconsulta! – YROjha

Cuestiones relacionadas