Quote Originariamente inviata da DarthSandr Visualizza il messaggio
L'ho risolta mettendo

select t.id deviceID, NULL label
from TABLE t
left join TABLE_SD sd on t.tablesd_id =sd.id
left join TABLE_C c on sd.tablec_id=c.id
where c.name LIKE ('%ubb%')
union
select t.id deviceID, d.label label
from TABLE trp
left join TABLE_D d on t.tabled_id =d.id
left join TABLE_C c on d.client_id=c.id
where c.name LIKE ('%ubb%')
order by label asc

Potete chiudere il thread
Ottimo che hai trovato la soluzione ma, così a occhio, anzichè una union potresti fare una sola query con delle leftjoin.
La prima query che fai cerca dalla TABLE qualcosa che soddisfi la ricerca su TABLE_C.
La seconda query anche ma in join con un'altra tabella...
Nella prima quindi fai una left join tra TABLE e TABLE_SD e left join tra TABLE_SC e TABLE_C, prendendo ciò che ha qualcosa di corrispondente in TABLE_C.
Nella seconda invece fai la stessa cosa ma con TABLE_D anzichè TABLE_SC.
Ora...non ti conviene fare una unica left join tra le tabelle con le giuste condizioni?
Tipo
codice:
select 
    `t`.`ID` AS `deviceID`
from
    `TABLE` as `t1`
left join
    `TABLE_SD` as `t2`
  ON
    `t2`.`ID` = `t1`.`tablesd_id`
left join
    `TABLE_C` as `t3`
  ON
    `t3`.`ID` = `t2`.`tablec_id`
     OR
     `t3`.`ID` = `t4`.`client_id`
left join
    `TABLE_D` as `t4`
  ON
    `t4`.`ID` = `t1`.`tabled_id`
where
    `t3`.`name` like ('%ubb%')
order by
     `label` ASC
Nella order non ho capito dove risieda "label" ma basta metterci davanti l'alias della tabella.
A rigor di logica dovrebbe funzionare, così come l'ho messa giù, ma sono relativamente di fretta e non ho ben capito la questione della label che può essere null ecc....
Prova :-)