Questo sembra funzionare da un rapido test che ho appena fatto ed evita la necessità di verificare l'esistenza di x=1
due volte.
SELECT SQL_CALC_FOUND_ROWS *
FROM mytable
WHERE x = 1
UNION ALL
SELECT *
FROM mytable
WHERE
FOUND_ROWS() = 0 AND x = 2;
Modifica:in seguito al tuo chiarimento alla domanda, ovviamente, le 2 domande dovranno essere compatibili con UNION affinché quanto sopra funzioni.
La risposta alla tua domanda aggiornata è No. Questo non è possibile in una singola query. Dovresti usare un po' di logica procedurale condizionale per eseguire la query desiderata.