2017-03-06 4 views
0

2つの表を結合する必要がありますが、最後の表(IsActive = 1の場合は完全な外部結合が必要です。 )は、結合された最初の2つのテーブルの代わりにそのデータを表示します。2つの表を別の表のOUTER JOINと結合する

(SELECT qp.ItemName AS name 
      , qp.TimeAdded AS created 
      , '' AS effective 
      , qp.VendorName AS supplier 
      , qp.Source AS source 
      , qp.VendorType AS type 
      , qp.Price AS cost 
      , '' AS price 
      , '' AS markup 
      , '' AS customer 
      , '' AS customerListID 
      , qp.VendorListID AS vendorListID 
      , '' AS itemListID 
    FROM  wp_quantum_purchases AS qp 
    WHERE  qp.IsActive = 1 AND 
      NOT EXISTS (SELECT 1 
         FROM wp_hunter_quote_parts AS hqp 
         WHERE qp.ItemName = hqp.ItemName AND 
           hqp.IsActive = 1)) 
UNION ALL 
(SELECT qs.ItemName AS name 
      , qs.TimeAdded AS created 
      , qs.SalesDate AS effective 
      , '' AS supplier 
      , qs.Source AS source 
      , '' AS type 
      , '' AS cost 
      , qs.Price AS price 
      , '' AS markup 
      , qs.CustomerName AS customer 
      , qs.CustomerListID AS customerListID 
      , '' AS vendorListID 
      , '' AS itemListID 
    FROM  wp_quantum_sales AS qs 
    WHERE  qs.IsActive = 1 AND 
      NOT EXISTS (SELECT 1 
         FROM wp_hunter_quote_parts AS hqp 
         WHERE qs.ItemName = hqp.ItemName AND 
           hqp.IsActive = 1)) 
UNION ALL 
(SELECT hqp.ItemName AS name 
      , hq.Quote_Date AS created 
      , hqp.SalesDate AS effective 
      , hqp.VendorName AS supplier 
      , hqp.Source AS source 
      , hqp.VendorType AS type 
      , hqp.Cost AS cost 
      , hqp.Price AS price 
      , CAST((((CAST(hqp.Price AS DECIMAL(10, 2)) - CAST(hqp.Cost AS DECIMAL(10, 2)))/CAST(hqp.Cost AS DECIMAL(10, 2))) * 100) AS DECIMAL(10, 2)) AS markup 
      , IFNULL(hq.Customer_FullName, 'N/A') AS customer 
      , hq.Customer_ListID AS customerListID 
      , hqp.VendorListID AS vendorListID 
      , hqp.Item_ListID AS itemListID 
    FROM  wp_hunter_quote_parts AS hqp 
    LEFT JOIN wp_hunter_quotes AS hq 
    ON  (hq.id = hqp.QuoteID) 
    WHERE  hqp.IsActive = 1) 
ORDER BY NAME ASC; 

しかし、これは第一と第二のテーブル内のデータを複製し、2倍のデータを示しています

は現在、この持っています。最後のテーブル(wp_hunter_quote_parts)にIsActive = 1が存在する場合は、1番目と2番目のテーブルのデータを1(存在する場合)として結合し、最後のテーブル(wp_hunter_quote_parts)を表示するコンテンツとして優先する必要があります。しかし、もしIsActive = 1が存在しないならば、wp_hunter_quote_partsItemNameより、私はwp_quantum_purchaseswp_quantum_salesの両方を1行と同じように組み合わせたいと思っています。

は、データがwp_quantum_purchasesに存在する可能性があるのでLEFT JOINを行うことはできませんが、wp_quantum_sales ORデータにwp_quantum_salesではなくwp_quantum_purchasesに存在することができない、またはデータがこれらのいずれかに存在する、とだけwp_hunter_quote_partsだけでなく、データには存在しませんでしたwp_hunter_quote_partsにも存在しない可能性があります。 ItemNameのはwp_quantum_purchasesとのisActive = 1に存在し、wp_hunter_quote_parts場合

ので、基本的には、他に、テーブルにItemNameのを持ってwp_quantum_purchasesから購入データを取得できませんItemNameのはwp_hunter_quote_partsに存在する場合に代わりにhunter_quote_partsからデータを取得します。

ItemNameのはwp_quantum_salesに存在してのisActive = 1、wp_hunter_quote_partsは、テーブルにItemNameのを持ってwp_quantum_salesから販売データを取得し、ItemNameのはwp_hunter_quote_partsに存在する他の場合は代わりにhunter_quote_partsからデータを取得。しない場合

第1テーブルと第2テーブルを結合するには、他のテーブルとの外部結合よりもどうすればよいですか?ここ

別の試み:

(SELECT IFNULL(qp.ItemName, qs.ItemName) AS name, IFNULL(qp.TimeAdded, qs.TimeAdded) AS created, qs.SalesDate AS effective, qp.VendorName AS supplier, qp.Source AS source, qp.VendorType AS type, qp.Price AS cost, qs.Price AS price, CAST((((CAST(qs.Price AS DECIMAL(10,2)) - CAST(qp.Price AS DECIMAL(10,2)))/CAST(qp.Price AS DECIMAL(10,2))) * 100) AS DECIMAL(10,2)) AS markup, qs.CustomerName AS customer, qs.CustomerListID AS customerListID, qp.VendorListID AS vendorListID, '' AS itemListID 
        FROM wp_quantum_purchases AS qp, wp_quantum_sales AS qs 
        WHERE (qp.IsActive = 1 OR qs.IsActive = 1) 
      AND NOT EXISTS (
       SELECT 1 
       FROM wp_hunter_quote_parts AS hqp 
       WHERE (qp.ItemName = hqp.ItemName || qs.ItemName = hqp.ItemName) AND hqp.IsActive = 1 
      ) 
       ) 
       UNION ALL 
      (SELECT hqp.ItemName AS name, hq.Quote_Date AS created, hqp.SalesDate AS effective, hqp.VendorName AS supplier, hqp.Source AS source, hqp.VendorType AS type, hqp.Cost AS cost, hqp.Price AS price, CAST((((CAST(hqp.Price AS DECIMAL(10,2)) - CAST(hqp.Cost AS DECIMAL(10,2)))/CAST(hqp.Cost AS DECIMAL(10,2))) * 100) AS DECIMAL(10,2)) AS markup, IFNULL(hq.Customer_FullName, 'N/A') AS customer, hq.Customer_ListID AS customerListID, hqp.VendorListID AS vendorListID, hqp.Item_ListID AS itemListID 
        FROM wp_hunter_quote_parts AS hqp 
        LEFT JOIN wp_hunter_quotes AS hq ON (hq.id = hqp.QuoteID) 
        WHERE (hqp.IsActive = 1)) 
      ORDER BY name ASC 

この1つは働くと考えましたが、それだけで行くと行くといっているし、これまでにクエリを完了していないようだと思われます。私は見ることができますが、これまでに完了していないエラーはありません...そして、これらのテーブルは非常に小さく、それは奇妙です...

答えて

0

あなたの質問を完全に理解していないかもしれませんが、最初の2つのテーブルを作成し、3番目のテーブルと外部結合を行います。

+0

ビューの作成内容がわかりません。基本的には、最初の2つのテーブルを1として結合する必要があります。最後のテーブルがIsActive = 1のItemNameが見つかった場合は、代わりにそのテーブルのデータを返す必要があります。理にかなっている? –

関連する問題