Kann es sein, dass Tabelle keine relationale Abbildung darstellt, sondern so eine Art Keyvalue Notation? Das würde ein etwas anderes Licht auf die Frage werfen.
Ansonsten wäre ich für eine Union Lösung wie von p80286, plus Aggregat dabei kommt am Ende etwa sowas raus:
SQL-Code:
select * from tabelle t,
(select max(userid) from tabelle where userid in (0,1) /*sicherheitshalber*/ and Name1!='' and Name2!='') filter
where t.userid = filter.userid
Da name1 und name2 angeblich mit zum PK gehören und die Anforderung das berücksichtigen soll, müsste es erweitert so heißen (was allerdings der Aussage widerspricht, Name1 und 2 wären unbekannt)
SQL-Code:
select * from tabelle t,
(select max(userid)
from tabelle
where userid =0
or (userid =1 and Name1=:pName1 and Name2=:pName2)) filter
where t.userid = filter.userid