Magnus
23. September 2011 um 07:15
1
Hallo,
ich habe zwei Tabellen die in etwa so aufgebaut sind. Das ist nicht auf meinem Mist gewachsen und lässt sich leider nicht ändern.
rights
[TABLE]
[TR]
[TD]username
[/TD]
[TD]where_part
[/TD]
[/TR]
[TR]
[TD]hans
[/TD]
[TD]a=1
[/TD]
[/TR]
[TR]
[TD]peter
[/TD]
[TD]a=3
[/TD]
[/TR]
[/TABLE]
infos
[TABLE]
[TR]
[TD]a
[/TD]
[TD]text
[/TD]
[/TR]
[TR]
[TD]1
[/TD]
[TD]salami
[/TD]
[/TR]
[TR]
[TD]3
[/TD]
[TD]schinken
[/TD]
[/TR]
[/TABLE]
Wie kann ich folgenden SELECT realisieren?
select * from infos where (select where_part from rights where username=CURRENT_USER);
Dabei bekomme ich logischerweise den Fehler: “FEHLER: Argument von WHERE muss Typ boolean haben, nicht Typ character”.
Vielen Dank!
Magnus
Gisman
23. September 2011 um 07:57
2
Du musst natürlich noch das Ergebniss des Subselect mit irgendwas vergleichen damit du den geforderten Boll zurückbekommst.
Also sowas z.B.
select * from infos where (select where_part from rights where username=CURRENT_USER) = $IRGENDWAS
Oder du baust das SQL so um, das du mit joins arbeiten kannst. Irgendwie müssen die Daten ja zusammenhängen.
Gruß Uwe
Magnus
23. September 2011 um 08:17
3
Das ist eben mein Problem, der Vergleich steht ja komplett in der anderen Tabelle: “a=1”
Magnus:
Hallo,
ich habe zwei Tabellen die in etwa so aufgebaut sind. Das ist nicht auf meinem Mist gewachsen und lässt sich leider nicht ändern.
rights
[TABLE]
[TR]
[TD]username
[/TD]
[TD]where_part
[/TD]
[/TR]
[TR]
[TD]hans
[/TD]
[TD]a=1
[/TD]
[/TR]
[TR]
[TD]peter
[/TD]
[TD]a=3
[/TD]
[/TR]
[/TABLE]
infos
[TABLE]
[TR]
[TD]a
[/TD]
[TD]text
[/TD]
[/TR]
[TR]
[TD]1
[/TD]
[TD]salami
[/TD]
[/TR]
[TR]
[TD]3
[/TD]
[TD]schinken
[/TD]
[/TR]
[/TABLE]
Wie kann ich folgenden SELECT realisieren?
select * from infos where (select where_part from rights where username=CURRENT_USER);
Dabei bekomme ich logischerweise den Fehler: “FEHLER: Argument von WHERE muss Typ boolean haben, nicht Typ character”.
Vielen Dank!
Magnus
test=# select * from rights ;
username | where_part
----------+------------
hans | a=1
peter | a=3
(2 rows)
test=# select * from infos;
a | t
---+----------
1 | salami
3 | schinken
(2 rows)
test=# select * from infos where a in (select regexp_replace(where_part,'a=','') from rights where username='hans');
a | t
---+--------
1 | salami
(1 row)
Geht aber nicht mehr, wenn sich die Spalte im WHERE auch noch dynamisch gestaltet. Dann wirst das scripten müssen (plpgsql-Funktion)
Andreas