Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

sql- abfrage übehr mehrere tabellen

Empfohlene Antworten

Veröffentlicht

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

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

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 ??!!

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

Ö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

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

*anshirnlang* Klar, daran hab ich gar nicht gedacht! :rolleyes:

Yep, dann wird Dir nur eine temporäre Tabelle übrigbleiben.

Gruss,

ICQ

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.

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

hiermit kommt er nicht klar :-/

Edit :

Naja hab es mal nun mit einer tmp Tabelle gelöst

Danke an alle :e@sy

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)

Ö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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.