Jump to content
Sign in to follow this  
Meddten

Query Frage steht vermutlich auf dem Schlauch

Recommended Posts

Hallo,

 

ich habe eine MSSQL Datenbank folgendermassen befuellt (reduziert auf das noetigste).

 

FileId					Value
===================================================
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	1
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	2
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	3
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	4
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	a
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	b
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	1
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	2

 

Ich brauche nun alle FileIds bei denen der Value 1 UND 2 ist.

 

Ich weiss das ein Satz natuerlich nur einen Wert in Value haben kann.

 

Im Beispiel waere das

 

FileId					Value
===================================================
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	1

 

und

 

FileId					Value
===================================================
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	2

 

Ich moechte das gerne in einem einzigen Select haben. Dann weiss ich schonmal die FileId naemlich FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5

 

Dann moechte ich aber noch einen Select haben wie SELECT * FROM table WHERE FileId = 'FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5'

 

Dann bekomme ich

 

FileId					Value
===================================================
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	1
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	2
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	3
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	4

 

Und genau das brauche ich.

 

Das ganze ist aber natuerlich langsam. Weil das 3 Selects sind. Ich versuche das irgendwie in einen einzigen Select unterzubringen. Vielleicht ist auch der Grundsaetzliche Ansatz falsch.

 

Anderes Beispiel. Ich suche nach Value 1 UND 2 UND a dann muss das Ergebnis des Queries wie folgt ausschauen

 

FileId					Value
===================================================
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	a
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	b
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	1
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	2

 

Noch ein Beispiel. Ich suche nach Value 1 UND 2 dann muss das Ergebnis des Queries wie folgt ausschauen

 

FileId					Value
===================================================
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	1
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	2
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	3
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	4
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	a
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	b
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	1
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	2

 

Noch ein Beispiel. Ich suche nach Value 1 dann muss das Ergebnis des Queries wie folgt ausschauen

 

FileId					Value
===================================================
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	1
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	2
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	3
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	4
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	a
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	b
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	1
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	2

 

Noch ein Beispiel. Ich suche nach Value 4 dann muss das Ergebnis des Queries wie folgt ausschauen

 

FileId					Value
===================================================
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	1
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	2
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	3
FB1C52B7-CBF5-43E2-83F5-FEF41D7BEFB5	4

 

Das Design der Tabelle kann ich nicht aendern.

Edited by Meddten

Share this post


Link to post
Share on other sites

Sorry, ich habe jetzt Deine Frage merhfach gelesen, verstehe aber nicht, was Du selektieren willst.

 

Vielleicht geht Du Frage nochmal anders an ?

 

Willst Du eine Query, die alle Values von Fileid anzeigt, wenn Value 2 vorkommt, oder was ?

 

edit

Ohne Gewähr auf Funktion (nicht getestet):

 

select fileid,values from table where fileid in (select fileid from table where values = 2) order by fileid

 

Zur Performance: Einen geeigneten Index setzen (Der SQL-Server hat dazu ein Tool)

Edited by zahni

Share this post


Link to post
Share on other sites
Sorry, ich habe jetzt Deine Frage merhfach gelesen, verstehe aber nicht, was Du selektieren willst.

 

Vielleicht geht Du Frage nochmal anders an ?

 

Willst Du eine Query, die alle Values von Fileid anzeigt, wenn Value 2 vorkommt, oder was ?

 

War vlt zu kompliziert. Ich hab den Eingangstext geaendert. Hoffe es ist nun verstaendlicher?

 

Danke

Share this post


Link to post
Share on other sites
Siehe mein Edit von eben. Passt das ?

 

Das mit dem IN wuerde gehen vermutlich. Nur folgendes Beispiel ist eigenltich nicht moeglich oder? Ausser es wird OR verwendet. Es muss aber AND sein.

 

Ich suche nach Value 1 UND 2 UND a dann muss das Ergebnis des Queries wie folgt ausschauen

 

FileId					Value
===================================================
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	a
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	b
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	1
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	2

Share this post


Link to post
Share on other sites

und wie select fileid,values from table where fileid in (select fileid from table where values = 2 and vaules =3 ) order by fileid ?

 

Das Subselect ermittelt alle Fileid, die ein Value 1 und 2 haben.

 

Das 1. Select gibt dann alle Fileid's sammt allen values aus, die das Subselect als Ergebnis hat.

Share this post


Link to post
Share on other sites
und wie select fileid,values from table where fileid in (select fileid from table where values = 2 and vaules =3 ) order by fileid ?

 

Das Subselect ermittelt alle Fileid, die ein Value 1 und 2 haben.

 

Das 1. Select gibt dann alle Fileid's sammt allen values aus, die das Subselect als Ergebnis hat.

 

Also das mit dem IN kann ich erst morgen testen. Ich hab bei der Tabelle noch was entscheidendes vergessen. Sorry. Weil dein Beispiel funktioniert natuerlich aber ich hab noch eine Spalte mehr die ich mitpruefen muss.

 

Folgendes:

 

Ich suche nach (Blabla = Wert3 UND Value = 1) UND (Blabla = Wert1 UND Value = a) dann muss das Ergebnis des Queries wie folgt ausschauen:

 

FileId					Value		Blabla
===============================================================
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	a		Wert1
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	b		Wert2
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	1		Wert3
65565E6E-BDD9-4C9E-B26D-9C411FE99CEA	2		Wert4

 

Das geht ja mit deinem Beispiel nicht

select fileid,values from table where fileid in (select fileid from table where (Blabla = wert3 and Value = 1) and (Blabla = wert1 and Value = a)) order by fileid

 

Das gibt ja gar keinen Treffer.

Share this post


Link to post
Share on other sites

Warum gibt das keinen Treffer ? Führe zuerst das Subselect alleine aus.

 

Falls die Query das gleiche "Fileid" merhfach liefert, mit "group by" arbeiten.

Share this post


Link to post
Share on other sites

Moin,

 

so könnte das aussehen:

 

SELECT * FROM T_Tabelle

WHERE FileID IN (

SELECT FileID FROM T_Tabelle

WHERE Value = 1 AND BlaBla = Wert1 )

AND FileID IN (

SELECT FileID FROM T_Tabelle

WHERE Value = 2 AND BlaBla = Wert1 )

AND FileID IN (

SELECT FileID FROM T_Tabelle

WHERE Value = 3 AND BlaBla = Wert1 )

 

Du hast soviele Unterselects wie du Suchbedingungen hast

 

oder soviele (Selbst-)Verknüpfungen wie Suchbedingungen:

 

SELECT FileID

FROM T_Tabelle a

INNER JOIN T_Tabelle b

ON a.FileID = b.FileID

INNER JOIN T_Tabelle c

ON a.FileID = c.FileID

WHERE (a.Value = 1 AND a.BlaBla = Wert1)

AND (b.Value = 2 AND b.BlaBla = Wert1)

AND (c.Value = 3 AND c.BlaBla = Wert1)

 

(Klammern dienen nur der Lesbarkeit)

 

Gruß Kai

Share this post


Link to post
Share on other sites
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte überlege Dir, ob es nicht sinnvoller ist ein neues Thema zu erstellen.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

Werbepartner:



×
×
  • Create New...