Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407

    [MYSQL] Problema con left join

    ho 2 tabelle (semplifico un pò):

    oggetti
    Codice PHP:
    CREATE TABLE  `prova`.`oggetti` (
    `
    idINT NOT NULL AUTO_INCREMENT ,
    `
    testoVARCHAR250 NOT NULL ,
    `
    prezzoDECIMAL5NOT NULL ,
    PRIMARY KEY (  `id` )
    ENGINE INNODB;

    INSERT INTO `oggettiVALUES(1'primo oggetto'10.10);
    INSERT INTO `oggettiVALUES(2'secondo oggetto'12.84); 
    movimenti
    Codice PHP:
    CREATE TABLE  `prova`.`movimenti` (
    `
    idINT NOT NULL AUTO_INCREMENT ,
    `
    idOggettoINT NOT NULL ,
    `
    tipoMovimentoSMALLINT NOT NULL ,
    PRIMARY KEY (  `id` )
    ENGINE INNODB 
    e devo avere una query che mi restituisce id oggetto sempre, e se c'è il collegamento con la tabella movimenti l'id del movimento, altrimenti null.

    questa è quella che ho scritto:

    Codice PHP:
    SELECT oggetti.idmovimenti.id
    FROM oggetti
    LEFT JOIN movimenti ON 
    movimenti.idOggetto oggetti.id 
    e funzionerebbe anche, se la tabella movimenti è vuota mi restituisce

    id id
    1 NULL
    2 NULL

    che è giusto, idem se ho un movimento per un solo oggetto:

    INSERT INTO `movimenti` VALUES(1, 1, 2);
    1 1
    2 NULL

    ora però io dovrei differenziare per il campo movimenti.tipoMovimento...

    perchè se correggo al query con

    Codice PHP:
    SELECT oggetti.idmovimenti.id
    FROM oggetti
    LEFT JOIN movimenti ON 
    movimenti.idOggetto oggetti.id 
    WHERE movimenti.tipoMovimento '4' 
    se non ci sono i movimenti non mi restituisce nessuna riga, invece del idOggetto e NULL?
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

  2. #2
    Utente di HTML.it L'avatar di strae
    Registrato dal
    Apr 2008
    Messaggi
    407
    ahhh.... come non detto, il comportamento del left join è corretto, mi sono confuso io per la stanchezza...

    cmq, per avere quella query ho risolto con un'altra select annidata (non voglio fare 2 query distinte)

    se a qualcuno vengono in mente altre idee sono ben accette
    You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
    I can accept failure, everyone fails at something - But I can't accept not trying.

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.