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_parts
のItemName
より、私はwp_quantum_purchases
とwp_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つは働くと考えましたが、それだけで行くと行くといっているし、これまでにクエリを完了していないようだと思われます。私は見ることができますが、これまでに完了していないエラーはありません...そして、これらのテーブルは非常に小さく、それは奇妙です...
ビューの作成内容がわかりません。基本的には、最初の2つのテーブルを1として結合する必要があります。最後のテーブルがIsActive = 1のItemNameが見つかった場合は、代わりにそのテーブルのデータを返す必要があります。理にかなっている? –