Select statement

Select statement

am 23.03.2006 13:52:06 von Eugen.Lechner

Hallo!
ich habe zwei Tabellen A und B.
Beide Tabellen sind miteinander über A.OID <--> B.AOID verknüpft.
Ziel ist alle Einträge aus A anzeigen, die nicht mit B verknüpft
sind. Mir fällt keine einfache Lösung ein :-(

Re: Select statement

am 23.03.2006 13:54:23 von Heiko Kramp

Hallo,

verknüpfe über left outer join
where B.AOID IS NULL.

schrieb im Newsbeitrag
news:1143118326.497827.28990@g10g2000cwb.googlegroups.com...
Hallo!
ich habe zwei Tabellen A und B.
Beide Tabellen sind miteinander über A.OID <--> B.AOID verknüpft.
Ziel ist alle Einträge aus A anzeigen, die nicht mit B verknüpft
sind. Mir fällt keine einfache Lösung ein :-(

Re: Select statement

am 23.03.2006 14:10:06 von Eugen.Lechner

Danke,

ich stand auf dem Schlauch :-) War sehr hilfsreich.

Re: Select statement

am 23.03.2006 18:46:50 von mika

Ich habe gerade ein ähnliches Problem:-))))

Tabelle1 enthält eine Aufgaben Liste->

Aufgabe,Kennzeichen
Nr1, für alle
Nr2, für alle
Nr3, für alle
Nr4, für einige

Hat ein Teilnehmer sein Aufgabe erledigt wird dieses in eine 2. Tabelle
geschrieben.

Tabelle2

Teilnehmer, Aufgabe
007,Nr1
007,Nr2
009,Nr1

und was mir jetzt fehlt ist ein sql-statement wie

select aufgabe from von tabelle1 where teilnehmer nicht in
Tabelle2.teilnehmer und Aufgabe nicht drin.

Damit würde der Teilnehmer nach einer erledigten Aufgabe die nächste
bekommen.

Hat jemand einen Rat?

Gruß Mika

Re: Select statement

am 24.03.2006 13:14:31 von Fabian Schladitz

Mika schrieb:
> Ich habe gerade ein ähnliches Problem:-))))
>=20
> Tabelle1 enthält eine Aufgaben Liste->
>=20
> Aufgabe,Kennzeichen
> Nr1, für alle
> Nr2, für alle
> Nr3, für alle
> Nr4, für einige
>=20
> Hat ein Teilnehmer sein Aufgabe erledigt wird dieses in eine 2. Tabelle=

> geschrieben.
>=20
> Tabelle2
>=20
> Teilnehmer, Aufgabe
> 007,Nr1
> 007,Nr2
> 009,Nr1
>=20
> und was mir jetzt fehlt ist ein sql-statement wie
>=20
> select aufgabe from von tabelle1 where teilnehmer nicht in
> Tabelle2.teilnehmer und Aufgabe nicht drin.
>=20
> Damit würde der Teilnehmer nach einer erledigten Aufgabe die nächst=
e
> bekommen.
>=20
> Hat jemand einen Rat?

Ja, normalisiere deine Tabelle.
Wie ist denn "Für Einige" derzeit abgebildet?

Ich würde dir empfehlen eine m:n Relation auch als solche abzubilden.

Also:
--Tabelle Aufgaben--
Aufgabennummer
Aufgabenbeschreibung
..

--Tabelle Teilnehmer--
Teilnehmernummer
Name
..

--Tabelle Teilnehmer_Aufgaben--
Teilnehmernummer
Aufgabennummer
Status (erledigt, offen, verschoben,...)

Dann kannst du sehr leicht suchen und bist zudem noch flexibler.

Wenn du bei deinem alten Design bleiben willst, solltest du obige Frage=20
beantworten.

--=20
HTH,
Fabian

Re: Select statement

am 27.03.2006 18:18:12 von mika

Zuerst einmal Danke für die Mühe.

Mal ein Beispiel:

Alle Schüler bekommen folgende Aufgaben:

5x6=3D
3+2=3D

Einige, die ihrer Hausaufgaben nicht gemacht haben
müssen noch folgende Aufgabe lösen:

6*3/9+25=3D

Das Problem ist, es geht dabei nicht um eine Schulklasse, sondern um
eine
Kleinstadt:-))) In der gibt es bekannte und unbekannte Teilnehmer. Für
eine
Allgemeine Aufgabe bekomme ich sofort 30000-100000 Einträge in einer
Aufgabentabelle.

Zur Zeit mache ich das mit einer do while schleife. Nicht sehr elegant.

Gruß Mika

Re: Select statement

am 28.03.2006 04:57:55 von Johannes Vogel

Hi Mika

Mika wrote:
> Zuerst einmal Danke für die Mühe.
> Mal ein Beispiel:
> Alle Schüler bekommen folgende Aufgaben:
> 5x6=
> 3+2=
> Einige, die ihrer Hausaufgaben nicht gemacht haben
> müssen noch folgende Aufgabe lösen:
> 6*3/9+25=
> Das Problem ist, es geht dabei nicht um eine Schulklasse, sondern um
> eine Kleinstadt:-))) In der gibt es bekannte und unbekannte Teilnehmer. Für
> eine Allgemeine Aufgabe bekomme ich sofort 30000-100000 Einträge in einer
> Aufgabentabelle.
> Zur Zeit mache ich das mit einer do while schleife. Nicht sehr elegant.

Wie Fabian bereits erwähnte:

Tabelle Aufgaben mit id, text, etc.
Tabelle Teilnehmer mit id, vorname, nachname, etc.
Tabelle ToDo mit idAufgaben, idTeilnehmer, erstelldatum, termin, etc.

Du wirst nicht drum herum kommen, in einer Schleife allen Teilnehmer in
der ToDo-Tabelle eine Eintrag zu den Aufgaben zu erstellen. Aber du
brauchst die Aufgabe nur einmal zu beschreiben. Dies gilt auch für den
Teilnehmer.

16.1. Wie kann ich mehr über SQL lernen?
http://www.php-faq.de/q/q-sql-lernen.html

HTH, Johannes


Schade hat die Kleinstadt kein Geld für jemand, der von Datenbanken (und
vom programmieren?) was versteht. SCNR. :-(

Re: Select statement

am 28.03.2006 22:32:59 von mika

Ja, lieber Johannes,

Kleinstädte sind auch nicht mehr das was Sie mal waren.
Und wie sollen sie dann gute und schlechte Programmierer
auseinander halten:-)))))))

Aber wie löse ich das Problem, wenn ich meinen Teilnehmer nicht kenne?
Und ich aber trotzdem eine Anwort von Ihm haben möchte?
Aber eben nur einmal!
Und sich die Reihenfolge der Aufgaben zu jeder Zeit ändern
können.
Und ich dabei eine Reaktionszeit von kleiner 0.5 Sekunden brauche?
Die gestellten Aufgaben auch noch abhängig von Standort sind?
zB. Teilnehmer aus Österreich müssen ersteinmal 1+1=3D rechnen, um
dann mit weiteren Aufgaben betraut zu werden.

Klar es geht dabei zwar nicht um Klassenarbeiten und Kleinstädte,
aber des ist ein schönes Beispiel.

Aber gut, ich habe mal wieder etwas dazu gelernt. Es sehr leicht,
bei verküpften Tabellen, heraus zu bekommen, was in einer Datenbank
drin ist.
Umgekehrt es ist aber sehr schwer, heraus zu bekommen, was nicht drin
ist.
Und eigendlich geht das gar nicht ohne zusätzlichen Programieraufwand.

Stelle Dir vor, ich niemanden gefragt und es gebe eine Lösung........

Danke für die Hilfe, für heute habe ich erst einmal genug
gelernt:-))))))

Gruß Mika

Re: Select statement

am 28.03.2006 22:46:58 von Johannes Vogel

Hi Mika

Mika wrote:
^-- Realnamen sind erwünscht!
> Kleinstädte sind auch nicht mehr das was Sie mal waren.
> Und wie sollen sie dann gute und schlechte Programmierer
> auseinander halten:-)))))))

> Aber wie löse ich das Problem, wenn ich meinen Teilnehmer nicht kenne?
> Und ich aber trotzdem eine Anwort von Ihm haben möchte?
> Aber eben nur einmal!

Nochmals von vorne: Also du willst Daten ablegen. Diese solltest,
verwendest du relationale Datenbanksysteme, normalisieren. Leider können
wir dir nicht helfen, so lange du verschweigst, was deine Aufgabe ist.
Vielleicht magst du dir ein Grundlagen-Buch über Datenbanken und
Normalisierung kaufen und dieses dir zu Gemüte führen.

> Und sich die Reihenfolge der Aufgaben zu jeder Zeit ändern
> können.

Interessiert auf DB-Ebene doch nicht. In welcher Reihenfolge du diese
zeigen möchtest, sei der Logik überlassen. Oder aber du meinst was
anderes und ich verstehe dich nicht.

> Und ich dabei eine Reaktionszeit von kleiner 0.5 Sekunden brauche?

Na und? Im schlimmsten Fall einfach etwas schnellere Hardware. Durch
Normalisierung wirst du die Datenmenge senken und damit das System
verschnellern.

> Die gestellten Aufgaben auch noch abhängig von Standort sind?
> z.B. Teilnehmer aus Österreich müssen ersteinmal 1+1= rechnen, um
> dann mit weiteren Aufgaben betraut zu werden.

dito. Egal - das DB-Design korrekt festgelegt und die meisten Probleme
lösen sich in Luft auf.

> Klar es geht dabei zwar nicht um Klassenarbeiten und Kleinstädte,
> aber des ist ein schönes Beispiel.

Aha. Aber ich habe noch immer nicht verstanden, worum es eigentlich
geht. Geht es darum, dass wir deine Aufgabe lösen sollten, du uns diese
aber nicht mitteilen willst?

> Aber gut, ich habe mal wieder etwas dazu gelernt. Es sehr leicht,
> bei verküpften Tabellen, heraus zu bekommen, was in einer Datenbank
> drin ist.
> Umgekehrt es ist aber sehr schwer, heraus zu bekommen, was nicht drin
> ist.

Selten ist es interessant, zu eruieren, was nicht vorhanden ist. Denn
diese Menge ist erst interessant, wenn eine Grundmenge bekannt ist. Und
sobald diese bekannt ist, möchte man herausfinden, was in der einen,
aber nicht in einer anderen Menge vorhanden ist (Differenz sozusagen)
und schon ist das Problem wieder aus der Welt.

> Und eigendlich geht das gar nicht ohne zusätzlichen Programieraufwand.
> Stelle Dir vor, ich niemanden gefragt und es gebe eine Lösung........

Du hast nicht gefragt. Du hast nur bisschen rumgetippt. Informationen
fehlen.

> Danke für die Hilfe, für heute habe ich erst einmal genug
> gelernt:-))))))

Ich hätte dir gerne geholfen - leider hast du mich nicht gelassen. Das
einzige, was es darüber zu lernen gibt:

1.17. Wie stelle ich meine Frage an die Newsgroup am sinnvollsten?
http://www.php-faq.de/q/q-newsgroup-fragen.html

HTH, Johannes