Erweiterte Suche

sql-abfrage
[ 1 | 2 ]

 
Sie sind hier: Forum » Technik » Software » sql-abfrage


Autor Nachricht
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 29.07.2009 - 11:15:26 Leider keine Berechtigung       zitieren


Dieser Code bringt mir das gewünschte Ergebnis außer der im Anschluß folgenden Spalten:
korrekte Ausgabe

Es sollen also kurz gefasst jeder Mitarbeiter mit dem Datum seines aktuellen Einsatzes ausgegeben werden

Schön, aber wie oben erwähnt hätte ich auch noch gerne ein paar andere spalten in der ausgabe. folgender code bringt alle relevanten spalten, allerdings ohne die eben genannte einschränkung auf den aktuellen einsatz:
relevante Spalten

wie könnte ich da nun vorgehen?
@edit: weil es so schön das design zerreisst nutze ich doch glatt unseren deluxe-nopaste-nerd-dienst inkl. syntax-highlighting :D



Zuletzt modifiziert von dp.Mordred am 29.07.2009 - 11:25:02

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Kasper
Clan Leader


Beiträge: 3254



User Pic


Dabei seit: 03. Nov 2007
Wohnort: Erbach/Donau
Letzter Login: 22. Nov 2017
# 29.07.2009 - 12:48:54 Leider keine Berechtigung       zitieren


Du kannst im FROM-Teil auch ein komplettes SELECT-Statement ablegen (Nested Query):

 Code
1:
2:
3:
 select a.*, b.datum from personal a,
(select id, max(datum) as datum from personal, auftrag where *blabla* group by id) b
where a.id=b.id

Bin gerade leider zu faul, alles vollständig niederzuschreiben.

Das DISTINCT ist zumindest in Deinem ersten Statement unnötig, da das durch MAX() und GROUP BY implizit gegeben ist.

Edit: Kannst natürlich auch nen JOIN mit dem Nested Select veranstalten.


Zuletzt modifiziert von dp.Kasper am 29.07.2009 - 12:55:41

  Private Nachricht an den User senden E-Mail an den User senden
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 29.07.2009 - 14:35:12 Leider keine Berechtigung       zitieren


oO, ich glaube dein code dürfte es schon bringen. sah eben auch, dass man im select nen subselect einbauen kann - geht wohl überall^^.

bringt das komma im from teil zwischen den tabellen eigentlich nen natural join?
also
 Code von Datei FROM auftrag, personal
1:
2:
 [/code] synonym zu
[code=FROM auftrag NATURAL JOIN personal]
?
denn die syntax in in dem hier zu nutzenden editor bzw. die anleitung ist etwas weit vom standard^^
also NATURAL JOIN gibbet gar nicht, INNER JOIN ausschließlich unter verwendung von ON.


Zuletzt modifiziert von dp.Mordred am 29.07.2009 - 14:39:31

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Kasper
Clan Leader


Beiträge: 3254



User Pic


Dabei seit: 03. Nov 2007
Wohnort: Erbach/Donau
Letzter Login: 22. Nov 2017
# 29.07.2009 - 15:00:24 Leider keine Berechtigung       zitieren


Der NATRUAL JOIN entspricht einer where-Klausel, in der alle gleichnamigen Spalten verknüpft werden (where a.id=b.id and a.vorname=b.vorname and...). Gibt's keine gleichnamigen Spalten, wird einfach jeder a-Datensatz mit jedem b-Datensatz verknüpft. Letzteres wäre dann Dein select * from a,b ohne WHERE-Klausel.

Das Vorhandensein der verschiedenen JOIN-Arten bzw. deren Bezeichnung ist in der Tat oftmals sehr DB-spezifisch.

Edit: http://aktuell.de.selfhtm...rtikel/datenbanken/joins/ beschreibt es ganz gut: Im Prinzip läuft's immer nur drauf hinaus, ob man die implizite oder explizite Schreibweise bevorzugt. Mir kommt die implizite mit WHERE-Klausel einfach intuitiver vor.


Zuletzt modifiziert von dp.Kasper am 29.07.2009 - 15:07:20

  Private Nachricht an den User senden E-Mail an den User senden
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 03.08.2009 - 10:16:44 Leider keine Berechtigung       zitieren


sodele, parallel arbeiten an der sache auch noch leute im uf :D
klick

der einfachheit halber nun der letzte stand, welcher im endeffekt nur einen schritt weiter ist als im thread bei uns:

jedenfalls bekomme ich leider folgende fehlermeldung:


allgemienr SQL Fehler:
Token unknown - SELECT - line 19 char 4

hm, ich als halb-noob sehe syntaktisch keine fehler, also klammer zu wenig o.ä.
ebenso sind die bezeichner alle korrekt. lässt dies etwa nur den schluß zu, dass subselects nicht unterstützt werden?
Übrigens: Man kann having nutzen! Sorry, ich hatte es bis dato nur falsch eingesetzt. Falls ihr damit noch Ideen habt....
Aber ich sehe bei Having halt das prob, dass wenn ich mit group by arbeite, ich ja ALLE splaten im SELECT, welche nicht in GROUP BY vorkommen, mit einer Aggregat-Funktion (MAX, MIN etc.) ausstatten muss?! Nur bringt mir das wohl wieder nen falsches Ergebnis
Hier zur Sicherheit nochmal der Code, wie ich ihn eingegeben habe.


nopaste

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Kasper
Clan Leader


Beiträge: 3254



User Pic


Dabei seit: 03. Nov 2007
Wohnort: Erbach/Donau
Letzter Login: 22. Nov 2017
# 03.08.2009 - 10:29:05 Leider keine Berechtigung       zitieren


Jo, er scheint das SELECT beim INNER JOIN nicht zu mögen. Müsstest mal die Doku dazu ankucken.

  Private Nachricht an den User senden E-Mail an den User senden
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 03.08.2009 - 11:55:05 Leider keine Berechtigung       zitieren


etwas anderes thema:
hm, mit was für nem editor und welche db guckste dir das denn an? haste da was möglichst "ansprcuhsloses"?
ich versuche nämlich momentan mir oracle xe zu installen, aber irgendwie ist es da sehr kompliziert :dunno: ich will eigentlich nur nen paar tabellen einfügen und darauf abfragen und prozeduren losjagen (möglichst ala oracle)...

topic:
die doku ist äußerst spärlich. subselcts werden da gar nicht erwähnt, having auch nicht.
aber ich habe einfach mal auf doof anstatt SELECT SUBSELECT geschrieben, weil das wohl bei einigen dbms auch möglich ist - siehe da: nun meckert er über den punkt hier:

 Code
1:
2:
3:
4:
 SUBSELECT
            personal[color=#FF0000].[/color]personalnr,
            auftrag.auftragnr,

die fehlermeldung ist identisch zu der vom SELECT vorher. :wall:

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Kasper
Clan Leader


Beiträge: 3254



User Pic


Dabei seit: 03. Nov 2007
Wohnort: Erbach/Donau
Letzter Login: 22. Nov 2017
# 03.08.2009 - 13:12:31 Leider keine Berechtigung       zitieren


Ich hab' keinen speziellen Editor o.ä., zumal ich derzeit kaum was mit Datenbanken mache.

Wenn's ums Absetzen von "Standard" SQL geht, würde Dir MySQL oder SQLite reichen. Wenn Du aber die Eigenheiten des jeweiligen SQL-Dialekts benutzt, bringt Dir das ned sonderlich viel.

Zum Fehler: Versuche mal die Tabellen jeweils mit nem eigenen Namen zu belegen (SELECT a.id, b.id FROM tabelle1 a, tabelle2 b). Ich glaub' er dürfte schon beim ersten SELECT personal.personalnr Probleme kriegen, da diese Spalte bzw. deren Herkunft nimmer eindeutig ist. Durch die Joins gibt's z.B. personal.personalnr mehrfach als Spalte.

  Private Nachricht an den User senden E-Mail an den User senden
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 03.08.2009 - 15:40:37 Leider keine Berechtigung       zitieren


 Zitat von dp.Kasper

Zum Fehler: Versuche mal die Tabellen jeweils mit nem eigenen Namen zu belegen (SELECT a.id, b.id FROM tabelle1 a, tabelle2 b). Ich glaub' er dürfte schon beim ersten SELECT personal.personalnr Probleme kriegen, da diese Spalte bzw. deren Herkunft nimmer eindeutig ist. Durch die Joins gibt's z.B. personal.personalnr mehrfach als Spalte.

hm, is das so? weil die einzige stelle, wo sie nicht eindeutig ist, wird doch abgefangen durch "AS innerauftrag"?
ansonsten wird personal.personalnr doch durch diese pseudo-natural-joins immer nur einsplatig/eindeutig angesprochen? oder kannste dein bsp etwas näher ausführen?
puh, jetzt bin ich verwirrt:
aber was ist eigentlich mit innerauftrag.personalnr? ist sie das, was durchs subselect ausgegben wird? weil dann müsste ja in der tat personal.personalnr im ersten SELECT dahingehend umbenannt werden?!

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Kasper
Clan Leader


Beiträge: 3254



User Pic


Dabei seit: 03. Nov 2007
Wohnort: Erbach/Donau
Letzter Login: 22. Nov 2017
# 03.08.2009 - 16:04:29 Leider keine Berechtigung       zitieren


Jetzt seh' ich's gerade: Lass mal das AS vor innerauftrag weg - AS gibt's imo nur bei Spalten, bei Tabellen/Subselects wird der neue Name einfach hinten rangestellt

  Private Nachricht an den User senden E-Mail an den User senden
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 03.08.2009 - 19:49:14 Leider keine Berechtigung       zitieren


hm probier ich morgen früh aus :)

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 04.08.2009 - 08:37:10 Leider keine Berechtigung       zitieren


ich ralls net - der meint immer noch unknown token - SELECT :(
könnte man vielleicht sowas machen, wie das subselect als prozedur/funktion abzubilden?
ich lese gerade hier was zur verwendetetn db. ich weiss nur nicht, welche version die hier haben, finde ich vielleicht noch raus. moementan gucke ich mir die 2009er an - embedded sql. dort gibts auch was zu subqueries...
Interbase

Zuletzt modifiziert von dp.Mordred am 04.08.2009 - 09:00:21

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Kasper
Clan Leader


Beiträge: 3254



User Pic


Dabei seit: 03. Nov 2007
Wohnort: Erbach/Donau
Letzter Login: 22. Nov 2017
# 04.08.2009 - 08:58:00 Leider keine Berechtigung       zitieren


In Oracle kannst Du sog. Views erstellen - die lassen sich dann wie normale Tables abfragen. Aber das sollte eigentlich auch so funktionieren. :(

  Private Nachricht an den User senden E-Mail an den User senden
dp.Mordred
Clan Leader


Beiträge: 2834



User Pic


Dabei seit: 25. Feb 2007
Wohnort: Mülheim an der Ruhr
Letzter Login: 30. Oct 2017
# 04.08.2009 - 09:01:52 Leider keine Berechtigung       zitieren


 Zitat von dp.Kasper

In Oracle kannst Du sog. Views erstellen - die lassen sich dann wie normale Tables abfragen. Aber das sollte eigentlich auch so funktionieren. :(

hm, ich meine das auch schon probiert zu haben, aber ich werds nach studium der dinge im oben editierten beitrag auch noch probieren...
ah, jetzt weiss ich genau welches rdbms genutzt wird:
SQL Server Version: WI-V1.5.0.4306 Firebird 1.5
GDS32.dll Version: Firebird WI-V6.3.0.4306

firebird version 1,5


Zuletzt modifiziert von dp.Mordred am 04.08.2009 - 09:11:02

  Private Nachricht an den User senden E-Mail an den User senden Website des Users besuchen
dp.Kasper
Clan Leader


Beiträge: 3254



User Pic


Dabei seit: 03. Nov 2007
Wohnort: Erbach/Donau
Letzter Login: 22. Nov 2017
# 04.08.2009 - 09:52:26 Leider keine Berechtigung       zitieren


Erst ab Firebird v2.0 werden "Derived Tables" unterstützt: http://www.firebirdsql.or...ngine&id=fb20_release

Musst Dir also in der Tat was anderes überlegen. :dunno:

  Private Nachricht an den User senden E-Mail an den User senden
Forum » Technik » Software » sql-abfrage [ 1 | 2 ]

Script Copyright by ilch.de | made by psd-resources.de | modified by dp.LuCiFeR | Impressum