2016-08-25 1 views
0

Ich habe zwei Anfragen, die mir eine identische Menge an c_id s zurückgeben (Betrag ist variabel)Daten Combine von variable Menge von Datensätzen in einer

SELECT c_id FROM test WHERE test_id=123 AND op=1 

SELECT c_id FROM test WHERE test_id=123 AND op=2 

Beispiel:

erste Abfrage Returns 1, 3, 5, 7

Zweite Abfrage gibt 2, 4, 6, 8

zurück

Die entsprechenden IDs sind:

1 2 
3 4 
5 6 
7 8 

Mit diesen c_id s ich diese Abfrage verwenden möchten:

offset where c_id=1 Data where c_id=1  Data where c_id=2 
. 
. 
. 
offset where c_id=3 Data where c_id=3  Data where c_id=4 
. 
. 
offset where c_id=5 Data where c_id=5  Data where c_id=6 
. 
. 
. 
. 
offset where c_id=7 Data where c_id=7  Data where c_id=8 
. 
. 
. 
. 
. 

:

SELECT a.offset, a.values, b.value 
FROM data AS a INNER JOIN data AS b ON a.offset=b.offset 
AND a.c_id=RESULTS FROM FIRST QUERY ABOVE 
AND b.c_id=RESULTS FROM SECOND QUERY ABOVE 

wie Meine erwartete Ergebnis aussehen sollte Die Menge an Daten, die die entsprechende c_id s zurückgibt, sind e Qual

Wie kann ich das erreichen? Es ist wie ein UNION ALL mit allen c_id s, aber ich habe keine Ahnung, wie das zu tun ...

+0

Haben Sie den gleichen Wert erfordern, wie in Ihrem erwartetes Ergebnis – StackUser

+0

@StackUser. Ich bin mir nicht sicher, ob ich dich richtig verstanden habe. Die 'c_id's sind in chronologischer Reihenfolge (wie im Beispiel gezeigt), aber sie sind nicht konstant. – Blobonat

Antwort

0

Es klingt wie Sie benötigen ein:

SELECT a.offset, a.values, b.value 
FROM data AS a INNER JOIN data AS b ON a.offset=b.offset 
AND a.c_id IN (SELECT c_id FROM test WHERE test_id=123 AND op=1) 
AND b.c_id IN (SELECT c_id FROM test WHERE test_id=123 AND op=2) 
+0

Ist es sicher, dass die Daten in der oben beschriebenen Reihenfolge zurückgegeben werden? – Blobonat

+0

Es gibt keine Sicherheit mit einer SQL-Abfrage, es sei denn, Sie geben eine 'Reihenfolge von' an – artm

Verwandte Themen