Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494

    [MYSQL] Join e controllo

    Salve,
    ho a disposizione due tabelle in una ci sono i dati dei ristoranti e l'altra contiene i periodi di chiusura se esistono.

    ristoranti

    id_ristorante | nome | citta | indirizzo | tipologia

    chiusure

    id_chiusura | id_ristorante | dal | al | motivo

    Dovrei selezionare i ristoranti che non sono chiusi per quella data

    codice:
    SELECT ristoranti.* FROM ristoranti r
    LEFT JOIN chiusure ON (ristoranti.id_ristorante = chiusure.id_ristorante) AND ('2015-10-03' BETWEEN chiusure.dal AND chiusure.al)
    WHERE citta = 'Milano'
    AND...
    Non so come continuare per dire che se non ha trovato niente in chiusure allora lo seleziona, avevo provato con having count < 1 id_chiusura ma non funziona.

  2. #2
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    Forse ho risolto: AND chiusure.id_chiusura IS NULL sbagliato?

  3. #3
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Basta togliere LEFT.
    Il join "normale" ritorna dati solo se la condizione è soddisfatta.
    Almeno credo, prova.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2015
    Messaggi
    43
    Ciao,

    se ho capito bene, vorresti estrarre tutti i ristoranti che hanno una corrispondenza nella tabella "chiusure"

    SELECT r.* FROM ristoranti r, chiusure c
    WHERE r.id_ristorante = c.id_ristorante
    AND ('2015-10-03' BETWEEN c.dal AND c.al)
    AND r.citta = 'Milano'
    AND...

  5. #5
    Utente di HTML.it L'avatar di lukezz
    Registrato dal
    Feb 2010
    Messaggi
    494
    No che hanno ma che non hanno, comunque ho risolto con AND chiusure.id_chiusura IS NULL, per ora sta funzionando.

  6. #6
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Ripeto: basta che togli LEFT
    codice:
    select * from test
    join documentiassociati on (test.id=documentiassociati.id)
    è equivalente a
    codice:
    select * from test,documentiassociati where test.id=documentiassociati.id
    Il LEFT join prende tutte le righe della tabella di sinistra, che ci siano quelle di destra oppure no.
    Il JOIN e basta invece richiede che esistano sia le righe di sinistra, che di destra.

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.