2012-04-12 9 views
1

Es tut mir leid, wenn der Titel verwirrend ist, ist es besser in einem Beispiel erklärt.SQL Return Zeilen-ID, wenn ein Feld mit meinem Suchbegriff nach meiner Zeilen-ID gruppiert

Ich habe eine Tabelle von Daten wie folgt aus:

1 ProductA 'Cheesy' 
2 ProductA 'Creamy' 
3 ProductA 'Juicy' 
4 ProductB 'Buttery' 
5 ProductB 'Clean' 
6 ProductC 'Bitter' 

Ich möchte an einem Suchbegriff ein, zum Beispiel ‚Cheesy‘ und ‚Juicy‘. Dies sollte zurück:

ProductA 

... weil ProduktA Spiele mit id 1 und 3.

Aber wenn ich für ‚Cheesy‘ und ‚Bitter‘ zu suchen, sollte dieser keine Datensätze zurück, wie ProduktA haben können " Cheesy ', aber es enthält keinen Rekord für' Bitter '.

Ist das möglich?

+0

Haben Sie versucht, 'INTERSECT' in Ihrer Abfrage zu verwenden? – HABO

+0

@ user92546: Guter Punkt, warum postest du keine Antwort? – Andomar

+0

@Andomar - Adressiert Ihre Bedenken unten. Manchmal sind Benutzer bereit, eine Vorstellung davon zu geben, was sie versucht haben. Manchmal genügt ein Anstoß in produktiver Richtung. Andere Male wollen sie nur die verdammte Antwort JETZT! So geht es. – HABO

Antwort

2

Ein Ansatz:

declare @Products as Table (ProductId Int Identity, Product VarChar(16), Property VarChar(16)) 
insert into @Products (Product, Property) values 
    ('ProductA', 'Cheesy'), ('ProductA', 'Creamy'), ('ProductA', 'Juicy'), 
    ('ProductB', 'Buttery'), ('ProductB', 'Clean'), 
    ('ProductC', 'Bitter') 

select Product 
    from @Products 
    where Property = 'Cheesy' 
intersect 
select Product 
    from @Products 
    where Property = 'Juicy' 

EDIT: Weiteres Beispiel:

-- To retrieve all data for the matching product(s):  
select * 
    from @Products 
    where Product in (
    select Product 
     from @Products 
     where Property = 'Cheesy' 
    intersect 
    select Product 
     from @Products 
     where Property = 'Juicy') 
+0

Hallo, Danke dafür. Ich habe folgendes getan: SELECT Produkt FROM Produkt WHERE (Property = 'Cheesy') INTERSECT SELECT Produkt FROM Produkt WHERE (Property = 'Juicy') Können Sie mir sagen, warum, wenn ich statt mache ein "SELECT *", das geht nicht? – RiceBucket

+0

Nach [MSDN] (http://msdn.microsoft.com/en-us/library/ms188055 (v = sql.105) .aspx) "INTERSECT" impliziert "DISTINCT" -Werte. Wenn Sie zusätzliche Spalten auswählen, sind die Werte unterschiedlich und die Schnittmenge ist leer. Ich bearbeite meine Antwort, um ein weiteres Beispiel zu geben. – HABO

1
select product from products 
where property = 'Cheesy' -- property 1 
or 
property = 'Juicy' -- property 2 
group by product 
having count(*) >= 2 -- number of properties 

Etwas in dieser Richtung arbeiten konnte, glaube ich.

Verwandte Themen