私は、ProductsとSalespeopleのテーブルを含むデータベースを持っています。 各製品はセールス担当者によって販売されているので、Products.SalespersonId
とSalespeople.Id
の間にFK-PKリンク があります。珍しいことはありません。UNIONクエリを避ける
我々はそのための表では、「豚の耳」バックSalespeople.Id
PKにFK'dでNULL可能ParentSalespersonId
列 を持っているセールスマン、 に「属している」サブセールスマンを持つことができます。 、別に突合せ醜いことから
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
:選択された営業担当者によって販売されている
選択した製品も選択販売員のサブ営業担当者によって販売された製品を選択UNION
必要 しかし自明でありますUNION
は、1つではなく2つのクエリを実行する必要があるため、パフォーマンスが低下します。
私はテーブルが必要な関係を達成ために再構成されるべきどのように長年にわたって多くのデータベースを作成し、書かれたクエリの100年代、 が、私はこの1つを測深することはできません...
ました、その醜いの必要性を削除するUNION
と第二のSELECT
?あなただけの1クエリでそれを行うことができます
おかげ
UNION'は避ける '回避する前に' SELECT * ' – Jodrell
がちょうどsalesperson.idのための条件を追加したり、同じ希望値に –