Meddten 10 Geschrieben 16. Dezember 2011 Melden Teilen Geschrieben 16. Dezember 2011 (bearbeitet) 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 16. Dezember 2011 von Meddten Zitieren Link zu diesem Kommentar
zahni 559 Geschrieben 16. Dezember 2011 Melden Teilen Geschrieben 16. Dezember 2011 (bearbeitet) 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 16. Dezember 2011 von zahni Zitieren Link zu diesem Kommentar
Meddten 10 Geschrieben 16. Dezember 2011 Autor Melden Teilen Geschrieben 16. Dezember 2011 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 Zitieren Link zu diesem Kommentar
zahni 559 Geschrieben 16. Dezember 2011 Melden Teilen Geschrieben 16. Dezember 2011 Siehe mein Edit von eben. Passt das ? Zitieren Link zu diesem Kommentar
Meddten 10 Geschrieben 16. Dezember 2011 Autor Melden Teilen Geschrieben 16. Dezember 2011 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 Zitieren Link zu diesem Kommentar
zahni 559 Geschrieben 16. Dezember 2011 Melden Teilen Geschrieben 16. Dezember 2011 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. Zitieren Link zu diesem Kommentar
Meddten 10 Geschrieben 16. Dezember 2011 Autor Melden Teilen Geschrieben 16. Dezember 2011 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. Zitieren Link zu diesem Kommentar
zahni 559 Geschrieben 16. Dezember 2011 Melden Teilen Geschrieben 16. Dezember 2011 Warum gibt das keinen Treffer ? Führe zuerst das Subselect alleine aus. Falls die Query das gleiche "Fileid" merhfach liefert, mit "group by" arbeiten. Zitieren Link zu diesem Kommentar
Meddten 10 Geschrieben 16. Dezember 2011 Autor Melden Teilen Geschrieben 16. Dezember 2011 Weil im subselect blabla nicht gleichzeitig wert1 und wert3 haben kann oder gleichzeitig value gleich a oder 1? ;) da stehen ja nur Ands Zitieren Link zu diesem Kommentar
hh2000 10 Geschrieben 17. Dezember 2011 Melden Teilen Geschrieben 17. Dezember 2011 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 Zitieren Link zu diesem Kommentar
Meddten 10 Geschrieben 17. Dezember 2011 Autor Melden Teilen Geschrieben 17. Dezember 2011 Hallo, danke ich werd das gleich mal testen. Man hat mir die Tabelle so ueberlassen. Man koennte sagen das Design der Tabelle ist nicht grad das guenstigste oder? Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.