Ich habe eine Datenbank mit Tabellen mit Produkten und Verkäufern. Jedes Produkt wird von einem Verkäufer verkauft, daher gibt es einen FK - PK - Link zwischen Products.SalespersonId
und Salespeople.Id
. Nichts Ungewöhnliches.Vermeiden Sie UNION Abfrage
Wir können einen Sub-Verkäufer haben, die zu einem Verkäufer ‚gehört‘, so hat die Tabelle eine Nullable-ParentSalespersonId
Spalte die „Schweinsohr“ FK'd zurück zu Salespeople.Id
PK ist.
Auswahl der Produkte von ausgewählten Verkäufern verkauft sind trivial, aber auch Produkte verkauft durch den Sub-Verkaeufer der gewählt Verkäufer erfordern eine UNION
Auswahl:
SELECT *
FROM Products
INNER JOIN Salespeople ON Salespeople.Id = Products.SalespersonId
WHERE Salespeople.Id = <some vale> -- products sold directly
UNION
SELECT *
FROM Products
INNER JOIN Salespeople AS Sub ON Sub.Id = Products.SalespersonId
INNER JOIN Salespeople AS Parent
ON Parent.Id = Sub.ParentSalespersonId
WHERE Parent.Id = <some vale>-- products sold indirectly
Abgesehen davon, dass stumpf hässlich, dass UNION
einen Leistungseinbruch verursacht, da zwei Abfragen ausgeführt werden müssen und nicht nur eine.
ich viele Datenbanken im Laufe der Jahre erstellt haben, und geschrieben 100 von Abfragen, aber ich dieses nicht begreifen kann ...
Wie sollen die Tabellen neu strukturiert werden, um zur Erreichung der Beziehungen erforderlich , aber die Notwendigkeit für diese hässliche UNION
und zweite SELECT
entfernen?
Dank
vor Vermeidung 'UNION' vermeiden SELECT *' – Jodrell
die zweite Abfrage nur versuchen, fügen Sie einfach eine Bedingung für salesperson.id OR parent.id gleich gewünschten Wert –