Zum Inhalt springen

sql- abfrage übehr mehrere tabellen


MadCro

Empfohlene Beiträge

Hi,

ich bekomm es einfach nicht hin,

hab eine tabelle die heisst "tblstorys",

dann noch eine "customers"

und eine dritte "tblauthorizedstories"

in tblstorys stehe halt daten mir eine auto_incremet id als primary key,

die tblauthorizedstories beinhaltet die zuordung welcher Kunde (aus tabelle customers) welche Daten aus tblstorys hat eine n:m beziehung.

als so was :

ID (auto_increment int) - StoryID (int) - KundenID (int)

1 - 22 - 11

2 - 5 - 7

usw.

Nun will ich alle daten aus tblstorys die der Kunde mit der ID z.B. 11 nicht hat

SELECT * FROM tblstories LEFT JOIN tblauthorizedstories ON

AS_Story = ST_ID GROUP BY ST_ID HAVING AS_Customer != 11 ORDER BY ST_ID

so gehts schonmal nicht :confused:

kann jemand helfen ?

Danke

Gruß

MadCro

Link zu diesem Kommentar
Auf anderen Seiten teilen

SELECT * from tblstories INNER JOIN tblauthorizedstories ON AS_Story = ST_ID INNER JOIN customers ON bedingung(kenn deine feldbez. nicht) WHERE c_id!=11

am rande, warum hast du in deiner n:m-tabelle einen zusaetzlichen PK ???

du hast doch einen zusammengesetzten

gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

SELECT * from tblstories INNER JOIN tblauthorizedstories ON AS_Story = ST_ID INNER JOIN customers ON bedingung(kenn deine feldbez. nicht) WHERE c_id!=11

am rande, warum hast du in deiner n:m-tabelle einen zusaetzlichen PK ???

du hast doch einen zusammengesetzten

gruss

danke zirri ,

aber wieso brauche ich den join auf customers ? ich will doch nur die daten aus tblstory die ein customer nicht hat, das kann ich doch auch über die customer_id im tblauthorizedstories filternt, oder ??!!

Link zu diesem Kommentar
Auf anderen Seiten teilen

SELECT * from tblstories INNER JOIN tblauthorizedstories ON AS_Story = ST_ID INNER JOIN customers ON bedingung(kenn deine feldbez. nicht) WHERE c_id!=11

Öhm, wenn ich Deine Abfrage richtig interpretiere (und du c_id! als Feld der customers gesehen hast), dann gibt er aber nur die "storys" aus, die auch wenigstens einen Satz in tblauthorizedstories drin haben, oder? *grübel*

Ich würd's so machen:

SELECT story.ID

FROM story where story.ID not in (select storyid from authstory where customer=11)

HTH,

ICQ

Link zu diesem Kommentar
Auf anderen Seiten teilen

Öhm, wenn ich Deine Abfrage richtig interpretiere (und du c_id! als Feld der customers gesehen hast), dann gibt er aber nur die "storys" aus, die auch wenigstens einen Satz in tblauthorizedstories drin haben, oder? *grübel*

Ich würd's so machen:

SELECT story.ID

FROM story where story.ID not in (select storyid from authstory where customer=11)

HTH,

ICQ

zirri, danke aber das war es nicht so ganz,

ICQ, Dir auch danke aber das mySQL was ich benutze kennte keine Sub Selects :(

dann muss ich das ganz über eine tmp Tabelle machen wie es aussieht , so n f**k

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nun will ich alle daten aus tblstorys die der Kunde mit der ID z.B. 11 nicht hat



SELECT DISTINCT T1.ID FROM STORIES T1

JOIN AUTHSTORIES T2 ON (T1.ID = T2.ST_ID AND T2.C_ID <> 11)


Das sollte dir alle Story-Ids zurückgeben, die Kunde 11 nicht hat, oder denke ich da jetzt falsch?

EDIT:

Ab Version 4.1.0 kann auch MySQL SubQueries.

Link zu diesem Kommentar
Auf anderen Seiten teilen

also bei mir gibt das nur Fehlermeldungen ON (T1.ID = T2.ST_ID AND T2.C_ID <> 11)

hiermit kommt er nicht klar :-/

Was für Fehlermeldungen? Das ist nichts, was MySQL nicht können sollte...

(hast du den Tabellen auch einen Namen gegeben? Also: FROM Stories T1. Das ist nichts anderes als würdest du schreiben:

ON (Stories.ID = AuthStories.ST_ID), nur eben durch die Umbenennung in T1 bzw. T2 kürzer)

EDIT: Du kannst auch irgendeinen Namen vergeben, ich benutze eben oft T1, T2 usw. In manchen SQLs hab ich aber auch schon sprechendere Namen verwendet (wenn z.B. in SubSelects mehrfach aus derselben Tabelle gelesen wurde, nur mit anderen Bedingungen)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Öhm, wenn ich Deine Abfrage richtig interpretiere (und du c_id! als Feld der customers gesehen hast), dann gibt er aber nur die "storys" aus, die auch wenigstens einen Satz in tblauthorizedstories drin haben, oder? *grübel*

sollen denn nicht nur stories ausgegeben werden, auf die ein customer x zugriff drauf hat ?!?

dafuer ist doch die tabelle tblauthorizedstories da und traegt nicht umsonst diesen namen.

gruss

Link zu diesem Kommentar
Auf anderen Seiten teilen

sollen denn nicht nur stories ausgegeben werden, auf die ein customer x zugriff drauf hat ?!?

Nein, es sollen nur die Stories ausgegeben werden, auf die ein Customer keinen Zugriff hat. Deine Abfrage sucht aus den Tabellen die zueinander passenden Datensätze raus und filtert den Customer 11 raus. Damit erhälst Du zwar alle Datensätze, die in beiden (oder bei Deiner Abfrage in allen drei) Tabellen verbundene Sätze haben, allerdings erwischt Du damit nicht die Sätze, die nur in tblstories vorkommen und in tblauthstories gar keinem Kunden zugeordnet sind.

ICQ

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...