Jump to content

Query Frage steht vermutlich auf dem Schlauch


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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.

bearbeitet von Meddten
Link zu diesem Kommentar

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)

bearbeitet von zahni
Link zu diesem Kommentar
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

Link zu diesem Kommentar
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

Link zu diesem Kommentar
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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...