Maresa P.: SQL Abfrage

Hallo loebes Forum,

ich habe in einer MySQL Datenbank zwei tabellen:

dateienxberechtigung
--------------------
dateien_id
dateien_user_benutzername

team
-------
team_projektnummer
team_user_benutzername
team_funktion

Die Relation wird über dateien_user_benutzername und team_user_benutzername hergestellt.

Diese beiden Tabellen steuern Zugriffsrechte auf Dateien, die über ein Webinterface upgeloaded werden können und über eine weitere Tabelle (dateien) verwaltet werden.

Ich möchte nun folgende SQL Abfrage realisieren:

SELECT
alle team_user_benutzername
bei denen team_projektnummer gleich 1 ist
UND
entweder garkein zugehöriger Eintrag in dateienxberechtigung vorhanden ist (also dateien_user_benutzername IS NULL)
ODER
wenn ein Eintrag in dateienxberechtigung vorhanden ist, dann muss die dateien_id ungleich 760 sein.

Leider bekomm ich die Query nicht hin. Soweit hab ich es geschafft:

SELECT
team_user_benutzername
FROM team
LEFT JOIN dateienxberechtigung ON dateien_user_benutzername = team_user_benutzername
WHERE dateien_user_benutzername IS NULL

Kann mir jemand helfen. Wie bekomme ich das ODER unter?

Vielen Dank für Euere Mühe.

Maresa P.

  1. Hi,

    Kann mir jemand helfen. Wie bekomme ich das ODER unter?

    Dein Problem ist nicht das ODER, sondern die Tatsache, dass bei einem "normalen" Join die Existenz eines entsprechenden Datensatzes vorausgesetzt wird - den Du hier aber nicht hast. Das Stichwort lautet Outer Join.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      Hallo Cheatah

      Dein Problem ist nicht das ODER, sondern die Tatsache, dass bei einem "normalen" Join die Existenz eines entsprechenden Datensatzes vorausgesetzt wird

      bei einem LEFT Joind wird doch nur die Existenz des linken Ausdrucks vorausgesetzt (also in meinem Fall die Existenz eines team_user_benutzername), des es ja immer gibt. Oder irre ich mich da?

      • den Du hier aber nicht hast. Das Stichwort lautet Outer Join.

      Ich hab mir mal in der MYSQL Doku (http://www.mysql.de/doc/de/JOIN.html) den Outer Join angesehen, komme auber irgendwie auf keinen grünen Zweig und finde den Anfang nicht. Kannst Du mir helfen?!

      Viele Grüße

      Maresa P

      Cheatah

      1. Hi,

        bei einem LEFT Joind wird doch nur die Existenz des linken Ausdrucks vorausgesetzt (also in meinem Fall die Existenz eines team_user_benutzername), des es ja immer gibt. Oder irre ich mich da?

        soweit ich weiß, irrst Du in der Tat. Allerdings konnte ich mich mit MySQL-Joins noch nie anfreunden; meiner Ansicht nach gehört sowas in die FROM- und die WHERE-Clause, und nirgendwo sonst hin.

        Ich hab mir mal in der MYSQL Doku (http://www.mysql.de/doc/de/JOIN.html) den Outer Join angesehen, komme auber irgendwie auf keinen grünen Zweig und finde den Anfang nicht. Kannst Du mir helfen?!

        "Meine" Outer Joins haben ein "(+)" in der WHERE-Clause. Sorry, bei MySQL kann ich nicht weiter helfen.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi Cheatah

          soweit ich weiß, irrst Du in der Tat. Allerdings konnte ich mich mit MySQL-Joins noch nie anfreunden; meiner Ansicht nach gehört sowas in die FROM- und die WHERE-Clause, und nirgendwo sonst hin.

          Ich darf Cheatah korrigieren *freu* *g*: LEFT JOIN ist nichts anders als die Kurzform vom LEFT OUTER JOIN.

          Was die Verknüpfungen in der WHERE-Clause angeht, bevorzugt der SQL-Standard die Verknüpfung in der Schreibweise mit den expliziten Joins.

          Gruss Daniela

  2. yo,

    Die Relation wird über dateien_user_benutzername und team_user_benutzername hergestellt.

    eine relation ist eine tballe und nicht eine beziehung. zum anderen denke ich, dass dein daten-design nicht ganz so gut ist. meiner meinung nach hast du die entitäen nicht gut genug ausgearbeitet und dann richtig miteinander in beziehung gesetzt, dass ist aber nur eine vermutung von mir. sollte dies aber so sein, dann macht es sinn, sich noch mal gedanken über die daten-struktur zu machen und dann die abfrage zu erarbeiten.

    Ilja