Ronny Seffner ronny@seffner.de wrote:
Der einfache Fall, Emailadresse ist gleich Kontoadresse, gelingt mir - ist ja nur eine Tabelle zu fragen. Der komplexere Fall in mail_virtual ist ein Alias auf ein Konto, hat Rene versucht zu lösen (leider erfolglos, wie es scheint). Der wirklich komplizierte Fall, das Konto ist ein catch_all hat noch gar keiner von Euch angegangen.
Ist das Problem jetzt klarer?
Ich hoffe. Du hast N Tabellen, die in einer bestimmten Reihenfolge abzufragen sind. Wenn in der ersten nix ist, dann die nächste und so. Du brauchst den ersten Treffer, und nur diesen einen. Und Du kannst nur 1 SQL machen.
Ja?
Also, Du hast 3 Tabellen r1, r2 und r3.
test=*# select * from r1; i --- 1 (1 row)
Time: 0,160 ms test=*# select * from r2; i --- 2 (1 row)
Time: 0,162 ms test=*# select * from r3; i --- 3 (1 row)
Du suchst den ersten Treffer, wo i=3 ist:
test=*# select i from (select 1 as o, i from r1 where i = 3 union select 2, i from r2 where i = 3 union select 3, i from r3 where i=3) foo order by o limit 1; i --- 3 (1 row)
Sowas in der Art? Mußt natürlich an Deine Bedingungen anpassen. Wichtig ist, daß alle 3 Selects dieselbe Struktur zurück liefern. Die extra Spalte o dient der Sortierung (Wichtung), das LIMIT 1 ist sicherlich klar.
Man könnte da auch eine Stored Procedure schreiben, in PG kein Thema, aber ich weiß nicht, was MySQL da bietet. Hätte den Charme, daß nur soviele Abfragen ausgeführt werden, bis ein Treffer da ist.
Andreas