puoi utilizzare gli if nelle query

ma a parte questo ...

spiega un po meglio per cosa intendi "la lingua passata", dove questo parametro nella query?

WHERE catalog_objects.lang = 1 OR catalog_objects.lang = 2
AND catalog_materials.lang = 1 OR catalog_materials.lang = 2
AND catalog_targets.lang = 1 OR catalog_targets.lang = 2

allora ... il where funziona che se il risultato complessivo delle operazioni booleane è TRUE allora estrae la riga altrimenti nulla

di conseguenza tu devi fare in modo di far tornare TRUE se ti interessa estrarre la riga o false se non la vuoi

ora se ho capito a te interessa estrarla solo se le tre tabelle hanno nella riga la colonna lang impostata su 1 o 2

per fare una cosa di questo tipo il codice che ti ha dato luca dovrebbe andare bene, il problema è, mi sa, che non abbiamo capito bene cosa ti serve fare :\

ora ... gli IF li puoi "creare" tu manualmente

infatti gli IF lavora pure con le condizioni booleano di conseguenza se, ad esempio, vuoi far si che le varie colonne lang abbiano 1 o 2 come valore devi costruire un "IF" in cascata

se prendiamo in considerazione
codice:
catalog_objects.lang = 1 OR catalog_objects.lang = 2
da solo questo codice vediamo che non fa altro che dire che il valore catalog_objects.lang deve essere uno o due.

A te interessa fare questo su i valori di tre tabelle diverse messe nelle join, di conseguenza devi usare le parentesi!

(catalog_objects.lang = 1 OR catalog_objects.lang = 2) AND (catalog_materials.lang = 1 OR catalog_materials.lang = 2)

guarda la struttura impostata in questo modo

(FALSE/TRUE OR FALSE/TRUE) AND (FALSE/TRUE OR FALSE/TRUE)

AND per restituire TRUE vuole due valori in input TRUE altrimenti restituisce FALSE
OR per restituire TRUE necessità che un solo input sia TRUE di conseguenza restituisce FALSE solo se sono tutti e due zero

quindi mettiamo che
catalog_objects.lang = 1

e
catalog_materials.lang = 2

quindi sostituendo i valori nell'espressione preecdente avremmo
(catalog_objects.lang = 1 OR catalog_objects.lang = 2) AND (catalog_materials.lang = 1 OR catalog_materials.lang = 2)

=

(TRUE OR FALSE) AND (FALSE OR TRUE)

=

TRUE AND TRUE

=

TRUE

di conseguenza viene estratta la riga

la stessa cosa con 3 o più valori

però a questo punto, se quello che volevi fare è questo, controlla i valori presenti nel database, per la query che esegui, perché la query che ti ha dato luca è corretta