SQL gleiche Attribute löschen?
Hey, wenn ich den SQL Befehl
SELECT * FROM verkauf,kunde,produkt WHERE verkauf.kundenID = kunde.kundenID AND verkauf.produktID = produkt.produktID
Eingebe bekomme ich folgendes Ergebnis bei meiner Datenbank:
Dort ist nun aber beispielsweise das Attribut "kundenID" zweimal drinnen, da es einmal in der Relation Kunde und einmal in der Relation verkauf drinnen ist. Kann ich meine Anfrage irgendwie so abändern, dass eins von diesen Attributen automatisch gelöscht wird?
3 Antworten
Es ist eine Unart, Stern bei Abfragen zu verwenden, das verschwendet nur wichtige Resourcen. Man qualifiziert immer nur die Felder die Angezeigt werden sollen.
Wenn Du das Schema der Datenbank nicht kennst, kannst Du mit:
// Root
Show Tables;
Die Tabellen abfragen und von dort aus die Tabellenschemata:
SELECT * FROM information_schema.tables WHERE table_type = 'BASE TABLE';
Du kannst anstatt des * natürlich explizit angeben, was Du auswählen möchtest (inklusive Umbenennung)
Du könntest auch natural joins benutzen.
select <cols> from verkauf natural join kunde natural join produkt;
AndreyevVitaliy hat es mit einem inner join gezeigt, bei dem Du die zu matchenden Spalten explizit angeben kannst. MAnche lehnen natural joins ab, weil DU dort nicht explizit angibst über welches Kriterium gejoined wird, das aber nur am Rande.
Grundlegend darfst Du auch sowas machen wie:
select verkauf.*,kunde.<col>, produkt.<col> as <othername> from ...
Select * FROM Verkauf FULL OUTER JOIN Kunde on Verkauf.KundeID = Kunde.ID where ….
z.B
SELECT db.verkauf.ID, db.Kunden.KundeName, db.verkauf.ID_produkt, db.Product.ProduktName
FROM ((db.verkauf
INNER JOIN db.kunden ON db.verkauf.ID_kunde=Kunden.ID)
INNER JOIN db.Product ON db.Product.ID=db.verkauf.ID_produkt)
Wie würde meine Anfrage denn aussehen wenn ich diese mit natural joins mache? Bin da immer sehr verwirrt wenn ich zu viele relationen joinen muss.