Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Join multipla

  1. #1

    Join multipla

    Salve ho un magazzino con degli scaffali in cui ci sono 4 coordinate :

    scaffale (con campo id_tipo_scaffale),campata,piano,locazione

    ognuno ha una tabella distinta ,

    su ogni locaione può essere inserita una macchina che tra i suoi campi ha

    id_tipo_scaffali e id_clienti

    Ho bisogno di vedere tutte le locazioni dello stesso tipo e stesso cliente :


    codice:
    SELECT 
      `locazioni_piani`.`id` as `id_locazione_piano`, 
      `locazioni_piani`.`nome` as `nome_locazione`, 
      `piani_campate`.`numero` as `numero_piani_campate`, 
      `campate_scaffali`.`numero` as `numero_campata_scaffale`, 
      `scaffali`.`nome` as `nome_scaffale` ,
       macchina.id_clienti
    FROM 
      `locazioni_piani` 
      JOIN `piani_campate` ON `locazioni_piani`.`id_piani_campate` = `piani_campate`.`id` 
      JOIN `campate_scaffali` ON `campate_scaffali`.`id` = `piani_campate`.`id_campate_scaffali` 
      JOIN `scaffali` ON `scaffali`.`id` = `campate_scaffali`.`id_scaffali` 
      JOIN `macchina` ON `macchina`.`id_tipo_scaffali` = `scaffali`.`id_tipo_scaffali` 
    WHERE 
      `scaffali`.`id_tipo_scaffali` = '1' 
      AND `macchina`.`id_clienti` = '1' 
      AND `scaffali`.`priorita` = 1 
      AND `locazioni_piani`.`deleted_at` IS NULL
    Perchè nel result row ho anche locazioni in cui non ci sono macchine o con clienti diversi ?

  2. #2
    quindi, stando all'esempio, ricavi righe con `scaffali`.`id_tipo_scaffali` diversi da '1' e/o `macchina`.`id_clienti` diversi da '1' ?

  3. #3
    in questo caso è 1 sia il tipo di scaffale che il cliente

    forse mi conviene legare le locazioni alla macchina invece che lo scaffale ?

    cioè mostrare tutte le locazioni con macchine e fare il where alla fine del cliente?

  4. #4
    rifaccio la domanda, visto che non hai risposto quindi, stando all'esempio, la query ti restituisce righe con `scaffali`.`id_tipo_scaffali` diversi da '1' e/o `macchina`.`id_clienti` diversi da '1' ?

  5. #5
    Quote Originariamente inviata da optime Visualizza il messaggio
    rifaccio la domanda, visto che non hai risposto quindi, stando all'esempio, la query ti restituisce righe con `scaffali`.`id_tipo_scaffali` diversi da '1' e/o `macchina`.`id_clienti` diversi da '1' ?
    hai ragione non ti ho risposto , NO, restituisce scaffali uguali a 1 ma con locazioni senza macchine.

    Penso anche restituisca locazioni con macchine con id cliente diverso da 1 (ancora sono agli inizi del popolamento quindi ho pochissimi dati , su questo ti faccio sapere)

  6. #6
    Scusa, ma non ti seguo più: all'inizio hai scritto
    Quote Originariamente inviata da pippuccio76 Visualizza il messaggio
    Perchè nel result row ho anche locazioni in cui non ci sono macchine o con clienti diversi ?
    adesso i clienti sono sempre = 1 e anche gli scaffali sono sempre = 1, però "chissà", visto che sei all'inizio del popolamento

    dove sta il problema? puoi fare un esempio pratico?

  7. #7
    Buongiorno a tutti,
    con la query di seguito sto estrapolando dei dati, da un DB MySql per la gestione di hardware software ed accessori, per creare un report in pdf, ma il join creato sulle tre tabelle interessate restituisce senza errori i dati principali da "dbpc" e da "hw_software" mentre da "hw_articoli" restituisce il record doppio, in questo caso. Mi spiego: il numero di record restituiti da "hw_articoli" varia al variare dei record di "hw_software". Dopo innumerevoli tentativi mi arrendo dando per assodato che l'errore � nel join, ma non ne vengo fuori. Dove sto sbagliando?

    ---CODICE--

    'SELECT nuc.idnuc, nuc.nuc, nuc.denominazione, hw_articoli.idarticolo, hw_articoli.nucac, hw_articoli.descrizione, hw_articoli.matricola, hw_articoli.idpcac, hw_dbsoftware.idsoftware, hw_dbsoftware.descsoft, hw_dbsoftware.snsoft, hw_dbsoftware.datainstsoft, hw_dbsoftware.idpcsw, idpc, schedapp ' .
    'FROM ((servizi.hw_dbpc hw_dbpc
    INNER JOIN servizi.hw_articoli hw_articoli
    ON ( hw_dbpc.idpc = hw_articoli.idpcac))
    INNER JOIN servizi.hw_dbsoftware hw_dbsoftware
    ON ( hw_dbpc.idpc = hw_dbsoftware.idpcsw))
    INNER JOIN servizi.nuc nuc
    ON (nuc.idnuc = hw_articoli.nucac)
    AND (nuc.idnuc = hw_articoli.descrizione) '.
    'WHERE hw_dbpc.schedapp = %d';

    ------
    Grazie anticipatamente

  8. #8
    Quote Originariamente inviata da Savonarola68 Visualizza il messaggio
    Buongiorno a tutti,
    con la query di seguito sto estrapolando dei dati, da un DB MySql per la gestione di hardware software ed accessori, per creare un report in pdf, ma il join creato sulle tre tabelle interessate restituisce senza errori i dati principali da "dbpc" e da "hw_software" mentre da "hw_articoli" restituisce il record doppio, in questo caso. Mi spiego: il numero di record restituiti da "hw_articoli" varia al variare dei record di "hw_software". Dopo innumerevoli tentativi mi arrendo dando per assodato che l'errore � nel join, ma non ne vengo fuori. Dove sto sbagliando?

    ---CODICE--

    'SELECT nuc.idnuc, nuc.nuc, nuc.denominazione, hw_articoli.idarticolo, hw_articoli.nucac, hw_articoli.descrizione, hw_articoli.matricola, hw_articoli.idpcac, hw_dbsoftware.idsoftware, hw_dbsoftware.descsoft, hw_dbsoftware.snsoft, hw_dbsoftware.datainstsoft, hw_dbsoftware.idpcsw, idpc, schedapp ' .
    'FROM ((servizi.hw_dbpc hw_dbpc
    INNER JOIN servizi.hw_articoli hw_articoli
    ON ( hw_dbpc.idpc = hw_articoli.idpcac))
    INNER JOIN servizi.hw_dbsoftware hw_dbsoftware
    ON ( hw_dbpc.idpc = hw_dbsoftware.idpcsw))
    INNER JOIN servizi.nuc nuc
    ON (nuc.idnuc = hw_articoli.nucac)
    AND (nuc.idnuc = hw_articoli.descrizione) '.
    'WHERE hw_dbpc.schedapp = %d';

    ------
    Grazie anticipatamente
    codice:
    SELECT nuc.idnuc,
           nuc.nuc,
           nuc.denominazione,
           hw_articoli.idarticolo,
           hw_articoli.nucac,
           hw_articoli.descrizione,
           hw_articoli.matricola,
           hw_articoli.idpcac,
           hw_dbsoftware.idsoftware,
           hw_dbsoftware.descsoft,
           hw_dbsoftware.snsoft,
           hw_dbsoftware.datainstsoft,
           hw_dbsoftware.idpcsw,
           idpc,
           schedapp
    FROM((servizi.hw_dbpc hw_dbpc
        INNER JOIN servizi.hw_articoli hw_articoli
            ON (hw_dbpc.idpc = hw_articoli.idpcac))
        INNER JOIN servizi.hw_dbsoftware hw_dbsoftware
            ON (hw_dbpc.idpc = hw_dbsoftware.idpcsw))
        INNER JOIN servizi.nuc nuc
            ON (nuc.idnuc = hw_articoli.nucac)
               AND (nuc.idnuc = hw_articoli.descrizione)
    WHERE hw_dbpc.schedapp = '%d'
    Così si legge meglio!
    Allora, tu fai un "from" che è una join, cioè prima join poi from, con le parentesi

    Secondo me dovrebbe essere
    codice:
    SELECT nuc.idnuc,
           nuc.nuc,
           nuc.denominazione,
           hw_articoli.idarticolo,
           hw_articoli.nucac,
           hw_articoli.descrizione,
           hw_articoli.matricola,
           hw_articoli.idpcac,
           hw_dbsoftware.idsoftware,
           hw_dbsoftware.descsoft,
           hw_dbsoftware.snsoft,
           hw_dbsoftware.datainstsoft,
           hw_dbsoftware.idpcsw,
           idpc,
           schedapp
    FROM servizi.hw_dbpc as hw_dbpc
        INNER JOIN servizi.hw_articoli as hw_articoli
            ON hw_dbpc.idpc = hw_articoli.idpcac
        INNER JOIN servizi.hw_dbsoftware as hw_dbsoftware
            ON hw_dbpc.idpc = hw_dbsoftware.idpcsw
        INNER JOIN servizi.nuc as nuc
            ON nuc.idnuc = hw_articoli.nucac
               AND nuc.idnuc = hw_articoli.descrizione
    WHERE hw_dbpc.schedapp = '%d'
    Hai delle join multiple sulle stesse tabelle ma su campi diversi o incrociati....perchè?

    Credo che la parte di from...join vada rivista ma senza una struttura reale delle tabelle e qualche record di esempio è complicato

  9. #9
    Quote Originariamente inviata da pippuccio76 Visualizza il messaggio
    Salve ho un magazzino con degli scaffali in cui ci sono 4 coordinate :

    scaffale (con campo id_tipo_scaffale),campata,piano,locazione

    ognuno ha una tabella distinta ,

    su ogni locaione può essere inserita una macchina che tra i suoi campi ha

    id_tipo_scaffali e id_clienti

    Ho bisogno di vedere tutte le locazioni dello stesso tipo e stesso cliente :


    Perchè nel result row ho anche locazioni in cui non ci sono macchine o con clienti diversi ?
    Non è chiara la logica di composizione del tuo archivio.

    Hai uno scaffale che a sua volta è suddiviso in campate, le quali sono suddivise in piani e ogni piano ha una serie di locazioni?
    Quindi tu hai 5 scaffali. Di questi 5, prendiamo il numero 2. Sca_2 è composto da chessò 7 campate. Prendiamo la campata 5. Cam_5 è formata da 9 piani. Prendiamo il 3 piano. Pi_3 è formato da 4 locazioni. Prendiamo Loc_1. In Loc_1 c'è la macchina 43 che è del cliente "pippo"?

    E' così?

  10. #10
    Buongiorno,
    chiedo scusa, innanzitutto per come distrattamente ho impaginato la richiesta e ringrazio dell'attenzione dedicatami.
    Nell'immagine allegata il risultato della query che restituisce i due record dei software e due volte lo stesso record con la stessa matricola dell'UPS. Se dovessi cancellare un software automaticamente l'Ups diventerebbe 1, altresì dovessi aumentare i software l'Ups diventerebbe numericamente uguale. Complicato vero? Mi sto perdendo, forse, in un bicchiere d'acqua?

    errore.jpg

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.