2017-08-19 2 views
0

Meine Abfrage hat hier eine Unterabfrage, aber es gibt keine Ausgabe zurück, aber in Wirklichkeit muss es eine Ausgabe geben, weil ich es manuell überprüft und ausgegeben habe Abfrage unten.Abfrage wird ohne Fehler ausgeführt, gibt aber keine Ausgabe zurück

select mac.mac_id,mac.mac1,mac.mac_type,record.soc_id 
    from mso_charter.mac 
    join record on mac.record_id = record.record_id 
    where mac.mac_type='ethB' and record.soc_id IN (select soc from d); 

Beispieldaten unter

mac_id mac1 mac_type record_id--- for table mac 
    1  6142 ethA  1 
    2  6412 ethB  1 
    3  2313 ethC  1 

    record_id soc_id ---- for table record 
    1   Qu132 
    1   as432 
    1   342aq 

    soc --- for table d 
    a12w2 
    23we 
    qw12 

mso_charter der Name Schema ist mac, d und Datensatz ist der Name der Tabelle.

+0

Ich denke, Sie benötigen Beispieldaten und gewünschte Ergebnisse. Wenn die Abfrage keine Ergebnisse zurückgibt, liegt dies daran, dass die Dinge nicht übereinstimmen. –

+0

Ihre Postgres-Version und Tabellendefinitionen, die Datentypen und Constraints zeigen, beginnend mit ... –

+0

Ich habe die obigen Beispieldaten hinzugefügt –

Antwort

0

Also, danke an alle, die versucht haben, mir in dieser Situation zu helfen. Ich hatte tatsächlich einen sehr dummen Fehler gemacht. Der Grund, warum ich die richtige Antwort gepostet habe, liegt wahrscheinlich daran, dass wenn jemand in Zukunft in solch einem Problem oder etwas ähnlichem stecken bleiben würde, wäre es hilfreich für sie.

select m.mac_id,m.mac,m.mac_type,r.soc_id 
    from mso_charter.mac m 
    join mso_charter.record r on m.record_id = r.record_id 
    where m.mac_type = 'ethB' and r.soc_id IN (select d.soc_id from d); 

Fehler war ich nicht das Schema Namen genannt hatte, während beitreten Durchführung und es gab mehrere Tabellen in anderen Schemas genannt Rekord, es war nur der aus Frustration neigen wir dazu, kleine Dinge zu vergessen, die mich einige Stunden gekostet über arbeiten .

0

Beachten Sie, dass Ihre Unterabfrage tatsächlich noch ist eine Verknüpfung und kann auf diese Weise geschrieben werden:

select mac.mac_id,mac.mac1,mac.mac_type,record.soc_id 
    from mso_charter.mac 
     join record using(record_id) 
     join d on record.soc_id = d.soc 
where mac.mac_type='ethB'; 

Gemäß dem Kommentar, den wir noch einen Datensatz zu reproduzieren und Hilfe benötigen.

+0

Also, das hat auch wirklich nichts anderes als ich meine Anfrage geschrieben habe!Aber leider liefern beide Ansätze keine Ergebnisse –

0

Keines Ihrer record.soc_id entspricht einem Ihrer d.soc_id. Du bekommst also keine Zeile.

Auch schreiben Sie select soc from d. soc, nicht soc_id. Tippfehler oder Fehler?

+0

Es war ein Tippfehler, sorry –

0

wählen soc_id ab statt wählen select soc from d

d sein sollte
0

Nach Angaben Ihrer Probe hat d eine Spalte soc_id. Das sollte für den Vergleich herangezogen werden:

select m.mac_id, m.mac1, m.mac_type, r.soc_id 
from mso_charter.mac m join 
    record r 
    on m.record_id = r.record_id 
where m.mac_type = 'ethB' and 
     r.soc_id in (select d.soc_id from d); 

Es ist möglich, dass Ids gleich aussehen, aber nicht, weil die internationalen Zeichen, versteckter Zeichen, Leerzeichen an der falschen Stelle, und so weiter.

Wenn dies nicht funktioniert, dann versuchen Sie folgendes:

  • Entfernen Sie die soc_id Zustand und sehen, ob alle Zeilen die erste Bedingung und join entsprechen.
  • Wenn das immer noch nichts zurückgibt, entfernen Sie die gesamte where Klausel, um zu sehen, ob irgendetwas mit der join übereinstimmt.
+0

Es gibt viele Werte, die mit dem Join übereinstimmen und das funktioniert ganz gut und ich bin nicht in der Lage zu erraten, warum r.soc_id in (wählen Sie d.soc_id aus d) funktioniert nicht. Das ist der einzige Teil, der nicht funktioniert –

Verwandte Themen