SQL - CONSULTA SQL CON CUATRO TABLAS

 
Vista:

CONSULTA SQL CON CUATRO TABLAS

Publicado por Carlos (1 intervención) el 23/08/2011 16:13:02
Soy un aprendiz de SQL, necesito hacer una consulta y no e logrado dar con el código, el problema es el siguiente:
Debo agregar un dato (CODIGO DEL PROYECTO y NOMBRE DEL PROYECTO) a un informe existente que corresponde a facturas de clientes, los datos están en las siguientes tablas:

FACTURAS : O_VTA (orden de venta)
C_VTA (contrato de venta)

ORDEN_VTA : COD_PROYECTO

CONTRATO_VTA : COD_PROYECTO

PROYECTO : campos COD_PROYECTO , DESC_PROY (nombre del proyecto)

Necisto que el informe ademas de otros datos quede asi:

NºFACTURA ....... CODIGO PROYECTO DESCRIPCION

La tabla FACTURA dentro de sus campos tiene el numero de ORDEN de VENTA (O_VTA)y CONTRATO de VENTA (C_VTA), pero estos datos no existen para todos los registros, es decir o tienen ORDEN DE VENTA o CONTRATO pero nunca los dos, a través de estas tablas quiero obtener el código del proyecto y el nombre del proyecto (este último dato está en la tabla PROYECTO)

Gracias por la ayuda que me puedan dar.

Saludos

Carlos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

CONSULTA SQL CON CUATRO TABLAS

Publicado por leonardo_josue (1173 intervenciones) el 26/08/2011 20:34:07
Hola Carlos, me hubiera gustado que pusieras algunos datos de ejemplo, así como algo de lo que haz intentado hacer, para ayudarte a afinar los datos. El modelo de datos que tienes tiene algunos detalles, pero bueno, ese es otro problema. No nos dices que BD estás utilizando, pero te voy a dejar un script de ejemplo de lo que más o menos entendí que quieres hacer. Los datos y las estructuras de las tablas las traté de deducir de lo que pusiste, pero si hay algo que esté mal o que falte entonce postea los scripts de creación de tus tablas y datos de ejemplo, para poder tratar de recrear el escenario que tienes. El script está en hecho para MySQL, pero creo que te debería funcionar para la mayoría de las BD, sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
mysql> CREATE TABLE FACTURAS (O_VTA INT, C_VTA INT);
Query OK, 0 rows affected (0.08 sec)
 
mysql> INSERT INTO FACTURAS VALUES (1, NULL), (NULL, 1);
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> SELECT * FROM FACTURAS;
+-------+-------+
| O_VTA | C_VTA |
+-------+-------+
|     1 |  NULL |
|  NULL |     1 |
+-------+-------+
2 rows in set (0.00 sec)
 
mysql> CREATE TABLE ORDEN_VTA(O_VTA INT, COD_PROYECTO INT);
Query OK, 0 rows affected (0.09 sec)
 
mysql> INSERT INTO ORDEN_VTA VALUES (1, 1);
Query OK, 1 row affected (0.06 sec)
 
mysql> SELECT * FROM ORDEN_VTA;
+-------+--------------+
| O_VTA | COD_PROYECTO |
+-------+--------------+
|     1 |            1 |
+-------+--------------+
1 row in set (0.02 sec)
 
mysql> CREATE TABLE CONTRATO_VTA (C_VTA INT, COD_PROYECTO INT);
Query OK, 0 rows affected (0.11 sec)
 
mysql> INSERT INTO CONTRATO_VTA VALUES (1, 2);
Query OK, 1 row affected (0.02 sec)
 
mysql> SELECT * FROM CONTRATO_VTA;
+-------+--------------+
| C_VTA | COD_PROYECTO |
+-------+--------------+
|     1 |            2 |
+-------+--------------+
1 row in set (0.00 sec)
 
mysql> CREATE TABLE PROYECTO (COD_PROYECTO INT , DESC_PROY VARCHAR(10));
Query OK, 0 rows affected (0.08 sec)
 
mysql> INSERT INTO PROYECTO VALUES (1, 'Proyecto 1'), (2, 'Proyecto 2');
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> SELECT T1.*, P.DESC_PROY FROM
    -> (
    -> SELECT F.*, O.COD_PROYECTO FROM FACTURAS F
    -> INNER JOIN ORDEN_VTA O ON F.O_VTA = O.O_VTA
    -> UNION
    -> SELECT F.*, C.COD_PROYECTO FROM FACTURAS F
    -> INNER JOIN CONTRATO_VTA C ON F.C_VTA = C.C_VTA
    -> ) T1 INNER JOIN PROYECTO P
    -> ON T1.COD_PROYECTO = P.COD_PROYECTO;
+-------+-------+--------------+------------+
| O_VTA | C_VTA | COD_PROYECTO | DESC_PROY  |
+-------+-------+--------------+------------+
|     1 |  NULL |            1 | Proyecto 1 |
|  NULL |     1 |            2 | Proyecto 2 |
+-------+-------+--------------+------------+
2 rows in set (0.00 sec)



Dale un vistazo para ver si te sirve, si tienes problemas para entender alguna parte lo comentas en el foro,

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar