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

Hybrid View

  1. #1

    SELECT * FROM da più tabelle

    Salve, stando a varie fonti tra cui W3Schools, alla clausola FROM è possibile indicare una tabella ove effettuare il SELECT.
    Tuttavia sul testo "Fondamenti di basi di dati" sono riportati vari esempi di FROM con ricerca in più tabelle separate da virgola. Esempi che posso testare solo tramite pagine PHP e MySQL, e che puntualmente non funzionano.

    Il libro è farlocco o cosa mi sfugge?

  2. #2

  3. #3
    Parto da questo comando funzionante
    Codice PHP:
    $sql "SELECT * FROM schede WHERE Titolo LIKE '%$testo%' ORDER BY Anno ASC"
    e mi farebbe comodo che cercasse anche in altre due tabelle
    Codice PHP:
    $sql "SELECT * FROM schede, numeriuno, speciali WHERE Titolo LIKE '%$testo%' ORDER BY Anno ASC"
    Tuttavia eseguendo
    Codice PHP:
    $cerca mysqli_query($link$sql) or die("Errore query database"); 
    va in die.

    Su W3School, modificando un esempio nel tutorial, prende tranquillamente nel FROM due tabelle tra quelle presenti, separate da virgola, come afferma il libro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    18
    Non è che per caso il campo Titolo è ambiguo ed è presente nelle altre tabelle ?
    Prova a rifare la query inserendo la tabella di appartenenza tipo NOME_TABELLA.Titolo.
    Stesso discorso per il campo ANNO.
    Se hai possibilità, prova ad eseguire prima la query direttamente sul db, almeno hai un messaggio di errore più verboso.
    Ultima modifica di treble; 12-11-2020 a 13:27

  5. #5
    Le tre tabelle hanno struttura identica, eccetto un campo che in un caso è INT, negli altri VARCHAR (suddivisione necessaria per la visualizzazione dei risultati con un ordine alfanumerico sensato).

    Dal db mi dà errore #1052 -, senza altri dettagli, che da veloce ricerca sembra correlato con una ambiguità della colonna ID che è auto incrementante. Ci sta, ovviamente ogni tabella parte da 1 come numerazione, ma mi pare strano come fenomeno.
    Anche rifacendo la query con le tabelle di appartenenza dei campi non risolvo.
    Sugli anni non saprei come muovermi dato che riguardano un ordinamento e dovrebbero essere mostrati appunto per anno, "mescolando" i risultati trovati nelle tre tabelle.
    Ultima modifica di Gas75; 12-11-2020 a 13:49

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2005
    Messaggi
    18
    Provi a modificare la query così ?

    SELECT * FROM schede, numeriuno, speciali WHERE schede.Titolo LIKE '%$testo%' ORDER BY schede.Anno ASC

    Solo per verificare se il mio dubbio è corretto, poi ovviamente andrebbe adeguata a tutte le tabelle.

  7. #7
    Quote Originariamente inviata da treble Visualizza il messaggio
    Provi a modificare la query così ?

    SELECT * FROM schede, numeriuno, speciali WHERE schede.Titolo LIKE '%$testo%' ORDER BY schede.Anno ASC

    Solo per verificare se il mio dubbio è corretto, poi ovviamente andrebbe adeguata a tutte le tabelle.
    Pare funzionare, nel senso che non trova nulla poiché il LIKE è una variabile, ma non dà errori.

  8. #8
    la query giusta sarebbe

    SELECT <colonne> FROM tabella1
    UNION
    SELECT <stesso_elenco_colonne> from Tabella2
    UNION
    SELECT <sempre_stesso_elenco_colonne> from Tabella3

  9. #9
    Quote Originariamente inviata da optime Visualizza il messaggio
    la query giusta sarebbe

    SELECT <colonne> FROM tabella1
    UNION
    SELECT <stesso_elenco_colonne> from Tabella2
    UNION
    SELECT <sempre_stesso_elenco_colonne> from Tabella3
    Resta il mistero sul perché W3School accetta più tabelle nel FROM dello stesso comando (anche se nel tutorial parla al singolare...) e il libro che ho sotto mano sciorini esempi analoghi senza alcuna UNION.
    E in ogni caso non funziona sebbene sia un comando presente in letteratura.
    Ultima modifica di Gas75; 12-11-2020 a 14:14

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Resta il mistero sul perché W3School accetta più tabelle nel FROM dello stesso comando (anche se nel tutorial parla al singolare...) e il libro che ho sotto mano sciorini esempi analoghi senza alcuna UNION.
    E in ogni caso non funziona sebbene sia un comando presente in letteratura.
    Ti consiglio di cercare qualche manuale che parla di SQL (secondo me dovrebbe essere una conoscenza imprescindibile per chiunque abbia a che fare con i database; chiunque non abbia almeno un'infarinatura basilare dovrebbe tenersi alla larga da qualsiasi database... e conoscere bene l'istruzione SELECT è parte dell'infarinatura basilare che più basilare non si può; ma questo è solo il mio pensiero).

    La clausola FROM accetta sia un elenco di tabelle separate da virgola (io tendo a non usare più questa forma ormai da tanto tempo), sia una sola tabella o (più frequentemente) più tabelle in JOIN (inner join, left join, right join, ecc).
    Ovviamente bisogna tener conto degli eventuali clash nei nomi dei campi (e qui si torna all'infarinatura basilare: riferimento semplice, riferimento completo, rinomina, ecc).

    Bisognerebbe sapere che nella clausola FROM si può inserire più volte la stessa tabella (generalmente in JOIN) e quindi è utile conoscere la rinomina delle tabelle.

    Fa tutto parte dello STANDARD SQL.

    E, visto che ci siamo, avere più tabelle nella FROM non c'entra assolutamente nulla con una UNION.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2026 vBulletin Solutions, Inc. All rights reserved.