2016-07-29 7 views
3

Ich habe Probleme mit der folgenden Abfrage.Problem mit dem Erstellen von Oracle-Abfrage

id| prop_id| obj_id| value| 
1   7  2  1 
2   8  2  1 
4   7  5  7 
5   8  5  12 

Eingangsparameter auf die Abfrage, sind:

  • Sammlung von (prop_id, value) Paaren

Wir müssen Datensätze auswählen, deren prop_id und values Spiel Eingangsparameter: aber es ist auch eine Einschränkung, die obj_id der resultierenden Datensätze müssen gleich sein. Wenn es nicht identisch ist, muss das Ergebnis leer sein. Andernfalls muss obj_id zurückgegeben werden.

Beispiel:

der Eingangsparameter Lassen Sie sagen, sind: (7,1) und (8,12).

Jetzt gibt es zwei Datensätze mit solchen Werten: erste und letzte. Jedoch ist obj_id des ersten Datensatzes 2 und obj_id des zweiten Datensatzes ist 5. Daher muss das Ergebnis leer sein, weil 2! = 5.

Ein weiteres Beispiel:

Lasst uns sagen Eingabeparameter sind: (7,7) und (8,12).

Jetzt gibt es zwei Datensätze mit solchen Werten: letzten zwei Datensätze. obj_id der ersten 5 und obj_id der zweiten Aufzeichnung auch 5. Daher ist, muss das Ergebnis 5.

Antwort

3

diese

select obj_id from table 
where (prop_id=7 and value=7) or (prop_id=8 and value=12) 
group by obj_id having count(*)=2 and count(distinct object_id)=1 
+0

Thank versuchen, aber ich Problem habe. Dies ist die Ausgabe, die ich nach dieser Abfrage bekomme: ORA-00920: ungültiger relationaler Operator –

+0

Das war meine Abfrage: "select OBJECT_ID aus COMP_INFO.OBJECT_VALUES wo (PROPERTY_ID, VALUE_INT) in (7,7) oder (PROPERTY_ID, VALUE_INT) in (8,12) Gruppe nach OBJECT_ID mit Anzahl (*) = 2 und Anzahl (eindeutige OBJECT_ID) = 1 " –

+0

Ok. Sehen Sie sich die bearbeitete Abfrage an. Das sollte gut funktionieren – Madhivanan