2017-07-19 6 views
0

Ich versuche, alle Werte zu erhalten, die mehr als einmal in einer Unterabfrage und extrahieren sie zu einer anderen Abfrage wiederholen, aber ich kann es nicht, funktioniert hier ist mein Code:Verschachtelte Abfrage - Fehler - zu viele Werte

select 
transaction_id, 
hashed 
from table1 
where hashed in (select hashed, count(1) 
             from data_headers1 
             where virtual_table_id = 5237260000000006162 
             and import_ts >= timestamp '2017-07-01 00:00:00' 
             group by hashed 
             having count(1) > 1) ; 

Was bedeutet, dass ich jede transaction_id sehen möchte, die 2 oder mehr gleiche Hash-Informationen hat.

+1

'hashed' kann nur mit einem einzelnen Wert verglichen werden, nicht 'hashed, count (1)' was ein Tupel von 2 Werten ist. Ich bin nicht sehr versiert in * PL-SQL * und kann daher nicht vorschlagen, wie Sie den Unterabfrageteil reparieren können, um 'count (1)' zu entfernen. – TheVillageIdiot

+0

Warum schließen Sie 'count (1)' in die 'select'-Klausel der Unterabfrage ein? Sie verwenden es nicht in der äußeren Abfrage. Also lösche es - der Rest sollte gut funktionieren. – mathguy

+0

Ich benutze die Anzahl, weil ich alle cc-Werte extrahieren möchte, die mindestens einmal wiederholen, Ist die einzige Methode, die ich für die Suche nach einem wiederholten Wert auf einer bestimmten Spalte kennen, daher die HAVING count (1)> 1 – Zombraz

Antwort

0

Ich glaube, ich habe das Problem gelöst:

select 
h.hashed, 
h.TRANSACTION_ID 
from table1 h inner join 
(select hashed cc, count(1) 
    from table1 where virtual_table_id = 5237260000000006162 
    and import_ts >= timestamp '2017-07-01 00:00:00' 
    group by hashed 
    having count(1) > 1) ca 
    on ca.cc = h.hashed 
    where h.VIRTUAL_TABLE_ID = 5237260000000006162; 

Es sendet mir die Informationen, die ich war auf der Suche nach ...

+0

Sie nur brauche einen Join, wenn du die "count" in der Ausgabe behalten musst. Du machst das nicht. Sie brauchen also keinen Join; Sie müssen nur 'count (1)' aus der 'select'-Klausel der Unterabfrage löschen. – mathguy

+0

Aber wie extrahiere ich nur wiederholte Werte von cc? – Zombraz

0

gerade von dem Ausgang gehasht aufspalten, Sie werden von der inneren Abfrage bekommen, weil Hash kann nur mit einem einzigen Wert verglichen werden.

select 
transaction_id, 
hashed 
from table1 
where hashed in (select hashed from(select hashed, count(1) 
            from data_headers1 
            where virtual_table_id = 5237260000000006162 
            and import_ts >= timestamp '2017-07-01 00:00:00' 
            group by hashed 
            having count(1) > 1)); 

Dies sollte funktionieren.

+0

Keine weitere Ebene verschachtelter Unterabfragen erforderlich. Entfernen Sie einfach "count (1)" aus der 'select'-Klausel der Unterabfrage. – mathguy