Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Join che annulla condizione where

    Salve ho questa query :

    codice:
    SELECT 
      `macchina`.`id`, 
      `macchina`.`seriale`, 
      `macchina`.`codice_macchina`, 
      `documento_arrivo`.`numero` as `num_documento_arrivo`, 
      `documento_partenza`.`numero` as `num_documento_partenza`, 
      `clienti`.`nome` as `nome_cliente`, 
      `macchina`.`created_at`, 
      `macchina`.`updated_at` 
    FROM 
      `macchina` 
      LEFT JOIN `documento_arrivo` ON `macchina`.`id_documento_arrivo` = `documento_arrivo`.`id` 
      LEFT JOIN `documento_partenza` ON `macchina`.`id_documento_partenza` = `documento_partenza`.`id` 
      LEFT JOIN `clienti` ON `macchina`.`id_clienti` = `clienti`.`id` 
    WHERE 
      `macchina`.`seriale` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`codice_macchina` LIKE '%%' ESCAPE '!' 
      OR `documento_arrivo`.`numero` LIKE '%%' ESCAPE '!' 
      OR `documento_partenza`.`numero` LIKE '%%' ESCAPE '!' 
      OR `clienti`.`nome` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`created_at` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`updated_at` LIKE '%%' ESCAPE '!' 
      AND `macchina`.`deleted_at` IS NULL 
    ORDER BY 
      `seriale` ASC
    Perchè vengono presi anche ii valori dove `macchina`.`deleted_at` sono settati ?

  2. #2
    codice:
    `macchina`.`seriale` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`codice_macchina` LIKE '%%' ESCAPE '!' 
      OR `documento_arrivo`.`numero` LIKE '%%' ESCAPE '!' 
      OR `documento_partenza`.`numero` LIKE '%%' ESCAPE '!' 
      OR `clienti`.`nome` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`created_at` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`updated_at` LIKE '%%' ESCAPE '!' 
      AND `macchina`.`deleted_at` IS NULL
    Tutta la parte "or" andrebbe messa tra parentesi, altrimenti la verifica con "and" viene fatta solo sull'utlima Or, cioè attualmente la tua condizione viene interpretata così
    codice:
    ( OR `macchina`.`updated_at` LIKE '%%' ESCAPE '!' 
      AND `macchina`.`deleted_at` IS NULL )
    quindi se una qualsiasi delle altre condizioni è vera, il record viene preso

  3. #3
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    codice:
    `macchina`.`seriale` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`codice_macchina` LIKE '%%' ESCAPE '!' 
      OR `documento_arrivo`.`numero` LIKE '%%' ESCAPE '!' 
      OR `documento_partenza`.`numero` LIKE '%%' ESCAPE '!' 
      OR `clienti`.`nome` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`created_at` LIKE '%%' ESCAPE '!' 
      OR `macchina`.`updated_at` LIKE '%%' ESCAPE '!' 
      AND `macchina`.`deleted_at` IS NULL
    Tutta la parte "or" andrebbe messa tra parentesi, altrimenti la verifica con "and" viene fatta solo sull'utlima Or, cioè attualmente la tua condizione viene interpretata così
    codice:
    ( OR `macchina`.`updated_at` LIKE '%%' ESCAPE '!' 
      AND `macchina`.`deleted_at` IS NULL )
    quindi se una qualsiasi delle altre condizioni è vera, il record viene preso

    Grazie mille

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.