Ergebnis 1 bis 4 von 4

Thema: WHERE condition komplett aus anderer Tabelle

  1. #1
    Magnus ist offline Neuer Benutzer
    Registriert seit
    23.09.2011
    Beiträge
    8

    Standard WHERE condition komplett aus anderer Tabelle

    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
    username where_part
    hans a=1
    peter a=3

    infos
    a text
    1 salami
    3 schinken

    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

  2. #2
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Du musst natürlich noch das Ergebniss des Subselect mit irgendwas vergleichen damit du den geforderten Boll zurückbekommst.
    Also sowas z.B.

    Code:
    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
    Have a lot of fun!

  3. #3
    Magnus ist offline Neuer Benutzer
    Registriert seit
    23.09.2011
    Beiträge
    8

    Standard

    Das ist eben mein Problem, der Vergleich steht ja komplett in der anderen Tabelle: "a=1"

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von Magnus Beitrag anzeigen
    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
    username where_part
    hans a=1
    peter a=3

    infos
    a text
    1 salami
    3 schinken

    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
    Code:
    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
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

Ähnliche Themen

  1. Frage Race Condition
    Von traxanos im Forum SQL
    Antworten: 6
    Letzter Beitrag: 04.05.2010, 18:29
  2. Tabelle mit Tabelle aus anderer DB überschreiben
    Von blablub im Forum Allgemeines
    Antworten: 4
    Letzter Beitrag: 02.05.2010, 07:05
  3. Frage Datensätze vor update in anderer Tabelle speichern
    Von eremit im Forum PL/pgSQL
    Antworten: 5
    Letzter Beitrag: 04.02.2010, 11:48
  4. Antworten: 3
    Letzter Beitrag: 26.11.2008, 09:07
  5. Antworten: 4
    Letzter Beitrag: 26.02.2007, 11:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum