PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL JOIN. Spalte der JOIN-Bedingung nicht zweimal ausgeben!



hydra
13.06.2004, 19:25
SQL:
SELECT t1.*, t2.* FROM tblmodelldaten AS t1, tblfahrzeugdaten AS t2 WHERE t1.ModellNr = t2.ModellNr;

wenn ich die zwei tabellen auf diese Weise verbinde, wird die Spalte der Join Bedingung (ModellNr) 2x ausgegeben.
Wie kann ich das verhindern?

phlekk
13.06.2004, 19:38
hi

also soweit meine sql-kenntnisse reichen, würde ich sagen das du das angibst was du ausgegeben haben willst. soweit ich weiß kannst du nicht die modellnr einfach so ausblenden.

gruss phlekk

hydra
13.06.2004, 20:29
hm. unangenehm wirds dann aber wenn du 20 Spalten hast...
irgendetwas muss es geben.
Wer weiß was?

thorus
13.06.2004, 22:55
Ich schließe mit phlekk an.
Du solltest niemals * benutzen, weil es meist Performanceeinbußen mit sich bringt, ausserdem ist es nicht wirklich sauber.
Zwar ist es mehr zu schreiben, alle Spalten anzugeben, aber es ist wesentlich übersichtlicher und du weißt auch noch in ein paar Jahren, was du überhaupt genau aus den Tabellen holst.

Ich würde ausserdem nicht so einen Microsoft-Join benutzen (der wird manchmal wirklich so genannt, weil der MS-SQL-Server lange nur diese Art konnte), sondern einen Inner Join:

SELECT t1.ModellNr, t1.bla, t2.blubb
FROM tblmodelldaten AS t1
INNER JOIN tblfahrzeugdaten AS t2
ON t1.ModellNr = t2.ModellNr
So kann man auch noch ein schön sauberes WHERE anschließen.

tr0nix
14.06.2004, 06:11
Sonst geht auch noch "SELECT DISTINCT ...". Dann ignoriert er doppelte Resultate.

Gruss
Joel

etuli
21.06.2004, 05:56
noch etwas komfortabler geht es ueber USING( ModellNr), wenn die Attribute den gleichen Namen besitzen.



wenn ich die zwei tabellen auf diese Weise verbinde, wird die Spalte der Join Bedingung (ModellNr) 2x ausgegeben.

Dafuer gibt es in MySQL keine Loesung. Ich weiss nicht, ob es so im SQL Standard formuliert ist, aber es werden beim Natural Join die gleichnamigen Spalten verbunden, dass keine Doppeldeutigkeiten auftreten. Bzw. bei einem Inner Join, wenn es nur eine gleichnamige Spalte gibt. Ansonsten waere eine referenzierung ueber die Tabellennamen moeglich.

Nur in MySQL meines Wissens nicht. Zumindest nicht ohne weiteres.

mfg