Microsoft MVPs inside





 MCSEboard.de – IT Pro Forum zu Windows Server 2008 R2 / 2008 / 2003 & Windows 7 / Vista / XP
Registrieren Hilfe Regeln Benutzerliste Suchen Heutige Beiträge Alle Foren als gelesen markieren

MS SQL Server Forum


Alles zum Thema Microsoft SQL Server — Q & A zu Microsoft SQL Server 2000 / 2005 / 2008 Architektur, Konfiguration, Troubleshooting


Antwort
     
Themen-Optionen
Alt 16.12.2011, 18:07   #1
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 6
SQL - Query Frage steht vermutlich auf dem Schlauch

Hallo,

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

Code:
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

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

Code:
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

Code:
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

Code:
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

Code:
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

Code:
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

Code:
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.

Geändert von Meddten (16.12.2011 um 18:47 Uhr).
    Mit Zitat antworten
Alt 16.12.2011, 18:25   #2
Expert Member
 
Offline
Registriert seit: 07-2005
Beiträge: 11.339
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)

Geändert von zahni (16.12.2011 um 18:42 Uhr).

Signatur
Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!

    Mit Zitat antworten
Alt 16.12.2011, 18:38   #3
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 6
Zitat von zahni Beitrag anzeigen
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
    Mit Zitat antworten
Alt 16.12.2011, 18:43   #4
Expert Member
 
Offline
Registriert seit: 07-2005
Beiträge: 11.339
Siehe mein Edit von eben. Passt das ?

Signatur
Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!

    Mit Zitat antworten
Alt 16.12.2011, 18:48   #5
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 6
Zitat von zahni Beitrag anzeigen
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

Code:
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
    Mit Zitat antworten
Alt 16.12.2011, 18:52   #6
Expert Member
 
Offline
Registriert seit: 07-2005
Beiträge: 11.339
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.

Signatur
Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!

    Mit Zitat antworten
Alt 16.12.2011, 19:01   #7
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 6
Zitat von zahni Beitrag anzeigen
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:

Code:
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.
    Mit Zitat antworten
Alt 16.12.2011, 20:34   #8
Expert Member
 
Offline
Registriert seit: 07-2005
Beiträge: 11.339
Warum gibt das keinen Treffer ? Führe zuerst das Subselect alleine aus.

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

Signatur
Wen du nicht mit Können beeindrucken kannst, den verwirre mit Schwachsinn!

    Mit Zitat antworten
Alt 16.12.2011, 21:26   #9
Newbie
 
Offline
Registriert seit: 12-2011
Beiträge: 6
Weil im subselect blabla nicht gleichzeitig wert1 und wert3 haben kann oder gleichzeitig value gleich a oder 1? da stehen ja nur Ands
    Mit Zitat antworten
Alt 17.12.2011, 19:06   #10
Board Veteran
 
Offline
Registriert seit: 07-2005
Ort: Hamburg
Beiträge: 524
Frage

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
    Mit Zitat antworten
Antwort


Themen-Optionen


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Query Frage Dominik Weber MS SQL Server Forum 1 25.03.2009 09:10
Ich stehe auf dem Schlauch - .adm datei den gpos hinzufügen ? randy Active Directory Forum 2 06.08.2007 10:16
Berechtigungen - Stehe etwas auf dem Schlauch FlatEric Windows Forum — Allgemein 11 20.03.2006 12:52
Proxy per GPO - stehe auf dem Schlauch ? Atrides Windows Forum — Allgemein 2 26.07.2005 16:06


Alle Zeitangaben in MEZ/CET. Es ist jetzt 21:12 Uhr. Seite generiert in 0,043 Sekunden.

- Unsere Partner -

Copyright © 2000 – 2012 MCSEboard.de

Sprung zum Seitenanfang