Sql-Abfrage mit eindeutigen Spalte Wert
Mein Ziel ist es, eine Abfrage geschrieben. Ich habe drei Tabellen A, B und C. Die Tische sind so geschrieben, daß A. Gebot = B. Gebot, und B. cID = C. cID. Dies ist im Grunde erlaubt es mir um eine Abfrage zu schreiben wo ich den link ein Datensatz von a nach b, und verbinden Sie das b-Datensatz um einen Datensatz von c. So weit So gut, einfachen Abfrage.
Was mein problem ist... eine der Spalten in die Abfrage eingeschlossen (nennen wir ihn C. col3) hat eindeutige Werte; die Werte in dieser Spalte kann nur einmal in das Ergebnis der Abfrage, aber die anderen Spalten aus den anderen Tabellen, die nicht diese Anforderung haben.
Kann jemand mir helfen, schreiben diese Abfrage?
Dank...
Update 1:
Hier ist das Tisch-layout (sorry, ich muss mit generischen Namen)
Tabelle A
Hilfe, Angebot, aCol1, aCol2, aCol3 ... aCol10
Tabelle B
bID, cID, bCol1, bCol2, bCol3 ... bCol10
Tabelle C
cID, cCol1, cCol2, col3, cCol4 ... cCol10
Ohne den einzigartigen Wert-Einschränkung in col3, würde ich schreiben, die Abfrage wie diese:
SELECT
A.aID, A.bID, A.aCol1 ... A.aCol10,
B.bID, B.cID, B.bCol1 ... B.bCol10,
C.cID, C.cCol1, C.cCol2, C.col3 ... C.cCol10
FROM
A, B, C
WHERE
A.bID = B.bID AND B.cID = C.cID
... aber natürlich nicht, stellen Sie sicher, dass die Werte in C. col3 sind einzigartig.
Update 2:
Mehr info...
Tabelle A und Tabelle B haben ein eins-zu-viele-Beziehung; Eine ist die "header", B ist "item".
Tabelle B und Tabelle C haben eine eins-zu-eins-Beziehung.
Diese Tabellen sind Teil des caching-Mechanismus, so viele Daten, die ähnlich aussieht, aber doch anders in einigen cols.
Da ist der header, die meisten von dem doppelte Werte gefunden werden, die in A.
Ich muss zuerst, um die Reihenfolge der Zeilen von A. Hilfe, aber dann, nach, dass ich brauche nur die ersten Zeilen zurückgegeben, in denen der Wert für C. col3 nicht angezeigt wird, in einer vorangegangenen Zeile von col.
Das macht die Dinge ein wenig klarer, oder bin ich noch nicht, macht das überhaupt Sinn? 🙂
Letzte Aktualisierung:
Ich wählte Bartosz Klimek Antwort, wie es war in der Nähe, was ich brauchte; ich hatte nur zum ändern der verschachtelte join-Klausel in der Mitte.
Danke Euch allen für Eure Hilfe!!!
- Ich sollte hinzufügen, dass ich bin mir bewusst, dass ich vermutlich so etwas wie eine geschachtelte select-Anweisung ... (wo.c.col3 in (select unique(c.col3) aus...)) usw., aber Frage mich, ob es eine bessere / richtige Weg, dies zu tun.
- Wie andere schon gepostet haben, UNTERSCHEIDBAR ist wahrscheinlich das, was Sie suchen. Jedoch, von den Klängen der Dinge, vielleicht können Sie Ihr problem noch komplizierter werden als das. Können Sie einige weitere Informationen über Ihre Tabellen, deren Inhalte und die tatsächlichen Ergebnisse, die Sie sehen möchten?
- Ich Stimme mit Robin, wir sind nicht in der Lage sein, um Ihnen zu helfen ohne weitere Informationen. Nur tun, eine VERSCHIEDENE ist wahrscheinlich nicht die Antwort, die Sie suchen.
- Ja, sollte das klarer... die aktuelle Abfrage enthält mehr als 20 Spalten, plus die Spalte, die Bedürfnisse der unterschiedlichen Werte, so mit einer Gruppe von Aggregatfunktionen auf die anderen Spalten nicht' arbeiten. Ich bin mit JDBC.
- Ich bin nicht sehr vertraut mit der java-Seite der Entwicklung, aber ist das nicht eine JDBC-Datenbank-Treiber-standard? Es ist kein DBMS. Könnten Sie vielleicht einige Daten, um uns zu helfen und Euch unterstützen. Als JohnFx Punkte heraus, die Frage, wie derzeit vorgesehen, ist fehlerhaft.
- Ja, JDBC ist der Java-Schicht auf der Oberseite der spezifischen Datenbank-Treiber. Aber das ist nur eine Allgemeine sql-problem, und (nicht ??) haben nichts zu tun mit, welche Datenbank ich verwende, es ist nur eine Allgemeine Abfrage. Ich fügte hinzu, mehr details zu meiner Frage.
- Ich habe eine Antwort unten, um hoffentlich zu helfen, zu erklären, warum die Frage nicht funktioniert
- Können Sie fügen Sie einige Beispiel mit ein paar Zeilen Beispieldaten für die Quell-Tabellen und ein Beispiel der Ausgabe, die Sie wollen?
- Ich fügte hinzu, ein zweites update; danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten Sie, dass die Unterabfrage am Ende garantiert, dass für jeden col3-Wert haben Sie bei den meisten ein Datensatz in der endgültigen Ergebnismenge enthalten ist. Der Datensatz ausgewählt ist, die man mit der minimalen Hilfe. Natürlich nehme ich an, dass aID, bID und cID sind Primärschlüssel von A, B und C, beziehungsweise.
Ich werde schnell machen, ein kleines Beispiel von dem, was Sie zu tun versuchen, und hoffentlich wird dies helfen, zu klären, warum, was, die Sie Fragen (derzeit) unmöglich ist.
Hätten Sie eine Kunden-Tabelle [CustomerID, CustomerName] und eine Orders-Tabelle, [Spalten OrderID, CustomerID, DollarAmount]
Wenn Sie wollte, dass alle Bestellungen für Kunden:
würde es wieder
Alles ist gut.
Aber der Gegenwert ist Ihre Frage bitten für diese Abfrage, aber mit einzigartigen CustomerNames. Was würde Sie anzeigen für OrderID und DollarAmount neben "Acme Corp."?
Könnten Sie Aggregate, die etwas darstellen,
Aber ich glaube, dass Sie erwähnt, dass Sie nicht wollen, Aggregate zu verwenden.
Tut dies erklären, das Problem klar?
Begann ich nach einer anderen Antwort, aber nach dem Umdenken in es ich es gelöscht. Wenn ich lese die Frage richtig, ich denke, das ist eine Unmögliche/unlogische Frage. Lassen Sie mich mit einem Beispiel erklären. wenn ich das falsch gelesen, bitte klären Sie die Frage mit ein exampe, was Sie suchen.
Tabelle A
Tabelle B
Tabelle C
Erwartete Ergebnis
Pro die Frage, die Sie nicht wollen, Wert1, wiederholt in der ersten Spalte, sondern tun, was Sie vorschlagen, geht in die zweite Zeile, wo es normalerweise wiederholt werden, wenn Sie nicht die unique-Einschränkung?
Wenn Sie andere Werte aus den Tabellen, Verwendung:
Auf alle Spalten, die nicht gruppiert sind, indem Sie verwenden müssen, um Aggregatfunktionen wie