none
Metodo Buscar RRS feed

  • Pregunta

  • SELECT  
    Entrada.Folio, 
    Entrada.AvisoEmbarque,
    Entrada.Contrato,
    Entrada.Lote,
    
    Operadores.Nombre,
    
    Camion.Marca,
    Camion.PlacasCaja,
    Camion.Modelo,
    Camion.NumeroEco,
    Camion.Placas,
    Camion.Color,
    Camion.Transportadora,
    
    Proveedores.Concepto,
    Proveedores.Provee,
    
    Productos.Producto,
    Productos.Tipo,
    Productos.NTipo,
    Productos.Observaciones 
       FROM 
       Entrada LEFT JOIN Productos ON Entrada.idEntrada = Productos.idEntrada
       LEFT JOIN Proveedores ON Productos.idProducto=Proveedores.idProducto
       LEFT JOIN Camion ON Proveedores.idProveedor= Camion.idProveedores
       LEFT JOIN Operadores ON Camion.idCamiones = Operadores.idCamion;

    Esta es la consulta que quiero realizar, lo que sale es lo que se ve en la imagen, y la idea es que se vean todos los datos

    

    viernes, 21 de febrero de 2020 18:33

Respuestas

  • Hola Katsa:

    me parece que esta relación la desarrollo mediante un esquema, que lo proporciona sql server

    Los esquemas de sql server no se utilizan para relacionar tablas, nos permiten más bien separar objetos para establecer permisos.

    Para saber si están en el mismo esquema:

    select * from INFORMATION_SCHEMA.TABLES  t
    where t.TABLE_NAME in ('Entrada','Productos')

    Te devolverá al menos dos filas, con 4 columnas.

    Table_Catalog que identifica la base de datos. Table_Schema que nos identifica el esquema sobre el que operan estas tablas, Table_name con los nombres de las tablas, y table_Type, que serán de tipo Base Table.

    • Marcado como respuesta Katsa miércoles, 26 de febrero de 2020 20:28
    martes, 25 de febrero de 2020 16:12

Todas las respuestas

  • Hola Katsa:

    Si las relaciones son correctas, entonces puedes ir comprobandolas una a una.

    De esa select añade el idEntrada.

    Y luego haz un select * from productos where idEntrada in (.....) sustityendo los puntos suspensivos, por los ids, que te devuelva la primera consulta, y separados por comas.

    Si no te devuelve registros, los datos no estan relacionados.
    viernes, 21 de febrero de 2020 18:51
  • Me puede poner un ejemplo de como hacerlo?
    viernes, 21 de febrero de 2020 19:07
  • Hola Katsa:

    SELECT  
    Entrada.Folio, 
    Entrada.AvisoEmbarque,
    Entrada.Contrato,
    Entrada.Lote,
    Entrada.idEntrada
       FROM 
       Entrada

    Esto te devuelve lo mismo que tu has pegado en la imagen, pero con la columna idEntrada

    Imaginando que salieron un 5 y un 15 para idEntrada

     select * from productos where idEntrada in (5,15) 
    Esto ¿Que te devuelve?

    viernes, 21 de febrero de 2020 19:46
  • La primera me devuelve la tabla de entrada.

    Tengo definido el id de entrada como null,¿ podría ser esto lo que ocasiona el problema?

    viernes, 21 de febrero de 2020 20:30
  • Hola Katsa:

    No. No es el problema. Eso puede ser una mala definición de las tablas, pero no el problema.

    Mira un poco estos dos artículos, que creo que te pueden ayudar.

    Inner join varias tablas

    https://javifer2.wordpress.com/2019/08/31/inner-join-multiples-tablas/

    Combinaciones

    https://javifer2.wordpress.com/2019/09/16/combinaciones-entre-tablas-inner-left-right-full/

    sábado, 22 de febrero de 2020 6:12
  • Si, las tablas que definieron no tienen una relación establecida, aunque ponga el dato de una tabla en otra no me establece la relación, me parece que esta relación la desarrollo mediante un esquema, que lo proporciona sql server
    lunes, 24 de febrero de 2020 15:51
  • Hola Katsa:

    me parece que esta relación la desarrollo mediante un esquema, que lo proporciona sql server

    Los esquemas de sql server no se utilizan para relacionar tablas, nos permiten más bien separar objetos para establecer permisos.

    Para saber si están en el mismo esquema:

    select * from INFORMATION_SCHEMA.TABLES  t
    where t.TABLE_NAME in ('Entrada','Productos')

    Te devolverá al menos dos filas, con 4 columnas.

    Table_Catalog que identifica la base de datos. Table_Schema que nos identifica el esquema sobre el que operan estas tablas, Table_name con los nombres de las tablas, y table_Type, que serán de tipo Base Table.

    • Marcado como respuesta Katsa miércoles, 26 de febrero de 2020 20:28
    martes, 25 de febrero de 2020 16:12
  • Entonces como puedo relacionar mis tablas, he intentado muchas cosas pero simplemente no puedo hacerlo, aunque mi consulta esta bien se que las tablas están mal relacionadas, pero sinceramente no he encontrado por donde puedo resolverlo. 

    Intente hacer la base desde cero pero aun así no he podido relacionarlas para que hagan el método de búsqueda y es lo ultimo que tengo que hacer para que mi aplicación funcione bien.

    Encontré que puedo realizarlo con CROSS JOIN y ya lo intente, y si me encuentra los datos, el problemas es que me devuelve 81 filas de datos como muestro en la imagen, y solo quiero que me devuelva una. ¿Como puedo resolver este problema? 


    • Editado Katsa martes, 25 de febrero de 2020 23:47
    martes, 25 de febrero de 2020 21:57
  • Hola Katsa:

    Ese no es el camino correcto y es imposible que funcione.

    Lo mas importante no es saber como  hacer para relacionar los datos, sino saber como se relacionan los datos entre ellos.

    SELECT  
    *
       FROM 
       Entrada

    Por cada fila que devuelva Entrada tiene que haber una columna en la cual su valor, sea coincidente con alguna columna identificativa de Productos.

    Select * from productos

    Si esto es correcto, entonces si haces

    Select * from Entrada inner join Productos
    on Entrada.colIdentificativa = Productos.colIdentificativa

    te tiene que devolver todas las filas de entrada que tengan relacion con productos.

    Pero en tú pregunta decías que te sale todo nulos, por tanto esa columna no parece relacionar esas tablas.

    FROM Entrada LEFT JOIN Productos ON Entrada.idEntrada = Productos.idEntrada


    miércoles, 26 de febrero de 2020 4:21
  • Si asì es, pero no tengo idea de como relacionarlas, yo he puesto columnas que son iguales pero simplemente me marca que el valor no puede ser nulo y no me deja ingresar los datos como yo quisiera.
    miércoles, 26 de febrero de 2020 15:05
  • Hola Katsa

    Que suerte que volviste luego de lo que pasó en el otro thread, yo creí que no volvías más, y hasta te llamé como pude.

    No se si voy a decir una gansada, pero están establecidas las FK desde la tabla principal hacia las otras tablas? Aunque me parece que aunque no lo estén (si los datos están bien insertados) las consultas con LEFT JOIN deberían funcionar. Pero es mejor establecer las FK, es parte del fundamento en que se basan las bases de datos "relacionales".

    La consulta que veo más arriba me parece que está muy bien, quizás tu problema son los datos mismos, por ejemplo, los campos que intervienen en las FK no pueden ser NULL, y por ejemplo, para que realmente un camión corresponda a cierta entrada de la tabla, el Id de ese camión tiene que coincidir con el campo IdCamion de la tabla principal, eso es la relación, que en este caso se llama FK (Foreign Key, o clave externa), que usualmente es un Id de una tabla detalle (como Camion) y la FK, IdCamion, de la tabla principal. Obviamente que ninguna FK ni ningún Id pueden admitir valores NULL.

    Espero que esto te ayude, y si no, seguimos viendo hasta que lo resuelvas

    Saludos

    Pablo

    miércoles, 26 de febrero de 2020 17:48
  • Muchas Gracias por su apoyo, si era una relación de la tabla Entrada a Camión, yo no hice la base de datos y estaba intentando trabajar con la lógica de quien la hizo, pero me di cuenta que realmente estaba mal pensado, ya me busca bien los datos, y se limita a solo el dato que esta buscando.
    miércoles, 26 de febrero de 2020 19:21