Query tra due tabelle

di il
9 risposte

Query tra due tabelle

Buongiorno a tutti,
mi sto avvicinando ora ai database SQL.

Ho fatto una raccolta dati e mi ritrovo con queste tabelle, entrambe nello stesso DB:

Tabella "list_sensor"

Nr Description
1 TX1
2 TX2
3 LX1
4 LX2
5 PX1



Tabella "datalog_sensor"

datetime 1 2 3 4 5
xxxxxxx 10 25 12 35 0,5
xxxxxxx 14 26 15 31 0,6
xxxxxxx 24 21 21 30 0,2
xxxxxxx 13 22 28 34 1,1


Ora vorrei fare una query per avere una visualizzazione tipo

datetime TX1 TX2 LX1 LX2 PX1
xxxxxxx 10 25 12 35 0,5
xxxxxxx 14 26 15 31 0,6
xxxxxxx 24 21 21 30 0,2
xxxxxxx 13 22 28 34 1,1

Come è possibile fare?
Prima di chiedere aiuto ho cercato ovunque ma tra joint varie questa funzione sui titoli delle colonne non la trovo.

Ringrazio anticipatamente chi potrà aiutarmi

Utilizzo MariaDB
E in questo momento le query le faccio utilizzando HeidiSQL

Se dovessero servire altre informazioni fatemi sapere

Grazie

9 Risposte

  • Re: Query tra due tabelle

    Non è che sia chiarissimo ...
    ma vuoi solo cambiare i nomi delle colonne
    della Tabella "datalog_sensor" quando estrai i dati ?
  • Re: Query tra due tabelle

    Si scusate, immaginavo.
    Vorrei rinominare le colonne sulla base dell'incrocio con la descrizione della tabella sensor list.
    Mi spiego
    La colonna 1 della datalog sensor si dovrà chiamare tx1 in quanto nella tabella list sensor a 1 corrisponde la descrizione tx1.
    Spero di essermi espresso un pò meglio.
    Grazie
  • Re: Query tra due tabelle

    marco.c ha scritto:


    ....
    Vorrei rinominare le colonne sulla base dell'incrocio con la descrizione della tabella sensor list.
    mmmhhh, che richiesta strana

    nella stragrandissima parte dei casi la struttura di una tabella
    cambia solo una tantum in dipendenza di nuove specifiche di funzionamento del programma
    .... e non ogni 2 x 3, per cui :

    non puoi usare degli alias fissi per i nomi di colonna
    ( tipo select 1 as TX1, 2 as TX2 ... from dialog_sensor)
    o addirittura rinominare i campi della tabella come vuoi ?
  • Re: Query tra due tabelle

    Riassumo: tu vuoi assegnare i nomi alle colonne della seconda query usando la prima tabellina.

    In SQL NON SI PUO" FARE.

    Il nome delle colonne viene assegnato in fase di CREAZIONE DELLO statement usato per fare la query.

    E' in QUESTA fase che devi creare lo statement SQL (in questo caso "SELECT ....") GIA' nel modo giusto.
    NON PUOI assegnare il nome delle colonne in modo ""dinamico"" !!!!

    L' SQL e' un linguaggio per manipolare

    1) insiemi (unione, intersezione, differenza)
    2) tabelle/relazioni (filtri per righe, filtri per colonne, prodotto cartesiano)

    Quello che vorresti fare e' una cosa che non ha NULLA a che fare con quanto descritto precedentemente.
  • Re: Query tra due tabelle

    migliorabile ha scritto:


    Riassumo: tu vuoi assegnare i nomi alle colonne della seconda query usando la prima tabellina.

    In SQL NON SI PUO" FARE.
    ....
    mah ... molto probabilmente si potrà anche fare
    in uno scenario ( tipo stored procedure) che supporta l'esecuzione di query dinamiche.

    Ma personalmente , è un valido motivo per farlo che mi sfugge
  • Re: Query tra due tabelle

    Come premesso sono nuovo nel campo,
    ed è il primo esempio che ho messo giu.

    Se non si può fare lo metterò giu in modo diverso.

    Grazie comunque a chi mi ha risposto.
  • Re: Query tra due tabelle

    marco.c ha scritto:


    Come premesso sono nuovo nel campo,
    ed è il primo esempio che ho messo giu.
    ...
    ... cioè ?
    stai dicendo che non è una reale esigenza ma un esercizio che ti sei inventato tu ?

    In questo caso, IMHO, è un validissimo motivo per farlo e divertirti come più ti piace

    Ecco le prime cose che ho trovato in rete per il tuo divertimento
    ( ... anche se sarebbe meglio fare riferimento alla documentazione ufficiale di MySql)

    questa per ricavare i nomi delle colonne :
    https://stackoverflow.com/questions/4165195/mysql-query-to-get-column-names

    questa per costruire ed eseguire una query dinamicamente:
    https://www.tutorialspoint.com/implement-dynamic-sql-query-inside-a-mysql-stored-procedure

  • Re: Query tra due tabelle

    No mi sono espresso male.
    Sono le prime che ho messo giu come tabelle di raccolta dati.

    Sono vari impianti dai quali registro tutti i sensori analogici ogni minuto.

    Per fare tabelle uguali e non ognuna per impianto ho messo giu, passatemi il termine fuorviante, questa due tabelle.
    La prima, list_sensor, con l'elenco dei sensori dell'impianto
    La seconda, datalog_sensor, con i valori registrati.

    Pensando si potesse poi con una query leggere i dati visualizzando invece di 1,2,3,4,5,6 come nomi colonne i rispettivi estrapolandoli da list_sensor.

    Ma pensavo molto male.
    Vorrà dire che li rifarò in un altro modo, ma mi sarebbe piaciuto fossero DB scalabili su più impianti.

    L'impianto 1 non avrà mai i sensori identici all'impianto 2 e cosi via.
  • Re: Query tra due tabelle

    marco.c ha scritto:


    ...
    Ma pensavo molto male.
    ...
    guarda che, IMHO, puoi farlo , ma le query te le devi costruire dinamicamente
    o da stored procedure o da codice del tuo linguaggio di programmazione ( che probabilmente è la via più adatta)
    sfruttando gli alias di colonna di cui ti ho accennato.

    N.B.
    ma se devi solo mostrare dei dati, per esempio in una tabella HTML, neanche ti servono le query dinamiche
    perchè l'intestazione delle colonne la ricavi ed imposti dalle tue tabelle essendo solo una questione di "stampa"


    Tieni comunque presente che realizzare un programma di tipo "general pourpose"
    in genere non è proprio una passeggiata

    Per concludere,
    la tua domanda non è tanto un argomento "database" ma più da "Ingegneria del software"
    ed il come cambiare il nome di una colonna in una query è l'ultimo dei problemi

    HTH
Devi accedere o registrarti per scrivere nel forum
9 risposte