WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 25.04.2008, 16:27   #1
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard MYSQL Unterabfrage

Bevor ich mit Details nerve, mal eine allgemein Frage:
Ich habe ein Unterabfrage nach folgendem Schema:
SELECT .. FROM .. WHERE .. IN (SELECT .. FROM .. WHERE)
Ich nehme an, dass MYSQL zuerst die Klammer-Abfrage ausführt, danach die vorgestellte.
Was passiert dann, wird aus beiden Ergebnissen die Schnittmenge ausgegeben?
Beispiel: 1,4,6,8,9 IN (3,4,7,8) ergäbe als Ergebnis : 4,8 ?
reemrev ist offline   Mit Zitat antworten
Alt 25.04.2008, 17:31   #2
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

Ja, er würde 4 & 8 als gültig ansehen

pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 25.04.2008, 17:55   #3
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

Mhhh, dann hab ich ein Problem: beide Abfragen liefern einzeln das korrekte Ergebnis, verschachtelt aber keinen einzigen Treffer, obwohl eine Schnittmenge vorhanden ist. Die Teilergebnisse beziehen sich auf ein und dieselbe Tabelle, könnte das ein Grund sein?
reemrev ist offline   Mit Zitat antworten
Alt 25.04.2008, 19:34   #4
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

zeig mal das gesamte Query, mit dem beschnittenen fangt man nicht viel an

pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 25.04.2008, 19:55   #5
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

SELECT alle.user_ID,zuname FROM alle,fagrpuser WHERE user.tag!=0 AND (fachgruppe_ID='13' AND alle.user_ID=fagrpuser.user_ID)
IN
(SELECT alle.user_ID FROM alle,zuteilung where (substr(zuteilung.klname,1,1)>"4" AND jahr="0708" AND alle.user_ID=zuteilung.user_ID))
group by alle.user_ID order by zuname
reemrev ist offline   Mit Zitat antworten
Alt 25.04.2008, 21:02   #6
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

ähem du solltest erstens mal korrekt referenzieren, denn je nach DBRMS kann ich dir jetzt nicht ad hoc sagen, was er in welchem (sub)select verwendet - und zweitens erfordert - imho - IN einen Vergleichswert sonst bist immer auf falsch

pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 25.04.2008, 22:16   #7
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

Ach was habt ihr es schwer mit uns Laien! Musste erst mal nachschlagen, was man unter DBRM versteht und was referenzieren bedeuteten könnte. MYSQL, wäre das eine korrekte Referenz?
Bzgl "einen Vergleichswert", Betonung auf "einen" oder auf "Vergleichswert"?
reemrev ist offline   Mit Zitat antworten
Alt 25.04.2008, 22:25   #8
pong
Inventar
 
Benutzerbild von pong
 
Registriert seit: 25.12.2000
Alter: 41
Beiträge: 9.063

Mein Computer

pong eine Nachricht über ICQ schicken
Standard

Zitat:
MYSQL, wäre das eine korrekte Referenz?
Nein, du hast ja in beiden Queries (select und subselect) die Felder der Tabelle referenziert indem du sie mit <tabellenname>.<feld> ansprichst ... welches du aber im Subselect ansprichst kann ich nur noch erraten

Zitat:
Bzgl "einen Vergleichswert", Betonung auf "einen" oder auf "Vergleichswert"?
Jeder Vergleich hat 2 Seiten zB a = b oder a IN b ... nur gegen was vergleichst du dein IN?

und vielleicht gleich vorweg, da du dich ja selbst als Laie bekannt hast, gewöhn dir nicht an Queries in einer Wurst runterzutippen, du findest dich spätestens wenns eine Seite überschreiten nie mehr zurecht und schon gar nicht jemand der dies dann nachvollziehen soll

Formatvorschlag

Code:
select abc,
         def,
         ...
         xyz
from tabelle
where abc IN (select a.abc from tabelle a);
btw. Semiklon am Ende jedes Queries nicht vergessen!

pong
____________________________________
\"Ein Gewitter reinigt die Luft\", sagte der Mann, nachdem ein Blitz seine Frau erschlug

Nicht klicken!


Erstposteralarm/Beschwerde/Kummerkasten


Verplattet
pong ist offline   Mit Zitat antworten
Alt 26.04.2008, 01:35   #9
Potassium
Inventar
 
Registriert seit: 06.03.2003
Alter: 37
Beiträge: 3.954

Mein Computer

Standard

Eine DB-Query > 1 Seite O_o
Und ich dachte die von phpBB wären lang
Potassium ist offline   Mit Zitat antworten
Alt 26.04.2008, 09:08   #10
reemrev
Inventar
 
Registriert seit: 31.01.2000
Beiträge: 1.706

Mein Computer

Standard

An und für sich werden 3 Tabellen angesprochen:
alle,fagrpuser, zuteilung wobei sie die 'alle_ID' innehaben.

In der ersten Abfrage suche ich alle Teilnehmer, die der Fachgruppe 13 angehören,
in der zweiten alle, die einer Klasse > 4 zugeteilt sind (das jahr ist jetzt nicht so wichtig). Dachte/hoffte/wünschte, das Ergebnis sei die Schnittmenge.

Wenn ich statt IN ein AND setze, funktioniert's.

ps: warum dann IN? Bei der Abfrage handelt es sich um eine von viele Möglichkeiten, die der User über radios und checkboxen zusammenklickt. Der Query ist also kein fixer string, sondern wird durch die Auswahl generiert. Dabei gibt es 7 Möglichkeiten einer Abfrage (Prinzipiell wäre dann auch eine Abfrage möglich die 1 Seite lang wird). Jetzt bin ich auf der Suche nach Verfeinerung oder etwas dazu lernen.
reemrev ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:04 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag