| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: Frage zu Sql-Abfrage im Forum Code Kitchen, in der Kategorie Software Home; Anzeige So, nachdem ich zu meiner letzten Frage mit Java und MySQL ja schnell gute Antworten hatte, probiere ich das ...
![]() |
| | #1 (permalink) |
| Moderator ![]() Registriert seit: 19.06.06 ![]() ![]() ![]() Likes: 51 | Frage zu Sql-Abfrage Anzeige So, nachdem ich zu meiner letzten Frage mit Java und MySQL ja schnell gute Antworten hatte, probiere ich das gleich nochmal. Eckdaten sind die gerade genannten: Java und MySQL Die Tabellen halte ich jetzt mal etwas abstrakt und auf das für die Frage nötigste beschränkt. Es geht hier um 3 Tabellen: Code: Tabelle Objekte |------|-----------------| | oID | Objekt | -------------------------- | 1 | obj1 | | 2 | obj2 | | 3 | obj3 | Tabelle Rechte |------|-----------------| | pID | Permission | -------------------------- | 1 | per1 | | 2 | per2 | Tabelle Objekte_Rechte |------|---------| | oID | pID | ------------------ | 1 | 1 | | 1 | 2 | | 2 | 1 | Select Object From Objekte; Interessant wäre für mich jetzt aber die Zusatzinformation, wieviele Rechte jedem einzelnen Objekt zugeordnet sind (welche ist irrelevant, nur die Anzahl). Klar, ich könnte jetzt für jedes einzelne Objekt nochmal eine Abfrage mit Count machen, wieviele Rechte dieses Objekt in der Tabelle Objekte_Rechte hat, aber dieser Weg gefällt mir nicht und ich hoffe eigentlich auf einen Tip, wie ich das in einer einzigen Abfrage unterbringen kann und als Ausgabe etwa sowas bekomme: Code: |--------|---------| | Object | Count | ------------------ | obj1 | 2 | | obj2 | 1 | | obj3 | 0 | |
| | |
| | #2 (permalink) |
| Registriert seit: 03.04.11 ![]() Likes: 10 | Musst doch eigentlich nur nach oID gruppieren und die pID zählen. Wenn du alle Objekte ausgegeben haben willst am besten noch einen äußeren Verbund sprich ungefähr so: Code: SELECT oID,COUNT DISTINCT(pID) FROM Objekte_Rechte GROUP BY oID Code: SELECT Objekte.Objekt,temp.Zahl FROM Objekte LEFT OUTER JOIN (SELECT oID,COUNT DISTINCT(pID) AS Zahl FROM Objekte_Rechte GROUP BY oID) AS temp ON Objekte.oID = temp.oID Und man muss jetzt noch beachten, dass für ein Objekt, dass keine Rechte hat nicht die 0 sondern die Nullmarke herauskommen wird. Geändert von Tsjuder (18.08.11 um 14:12 Uhr) |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Member of Honour ![]() Registriert seit: 28.05.10 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 210 | also den java bezug sehe ich nicht, aber was du suchst klingt nach join + aggregation Code: SELECT Objekt, Count(pID) FROM Objekte AS t1 LEFT JOIN Objekte_Rechte AS t2 ON t1.oID=t2.oID GROUP BY Objekt // da war doch jemand schneller ...
__________________ Code: :(){ :|:& };: |
| | |
| | #5 (permalink) | |
| Moderator ![]() Registriert seit: 19.06.06 ![]() ![]() ![]() Likes: 51 | Zitat:
![]() Der Bezug auf Java war auch eigentlich nur deshalb dabei, falls es mit dem JDBC Einschränkungen irgendeiner Art geben sollte, die mir nicht bekannt wären Da gebe ich dann doch lieber zu viele Infos als zu wenige | |
| | |
| | #6 (permalink) |
| Moderator ![]() Registriert seit: 19.06.06 ![]() ![]() ![]() Likes: 51 | So, kurze Rückmeldung, hat genau so funktioniert, wie ich mir das erhofft habe , Danke |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |