Je dois combiner 2 tables contenant ou non les données, mais j'ai besoin d'une jointure externe complète où la dernière table (si elle a un contenu où IsActive = 1) obtient montré que les données, au lieu des 2 premières tables combinées.Combinaison de 2 tables avec un OUTER JOIN sur une autre table
ont actuellement ceci:
(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;
Mais ceci est la duplication des données en 1ère et 2e tables et affiche les données deux fois. J'ai besoin que les données des 1er et 2ème tableaux soient combinées comme 1 (si existe), mais pour donner la priorité au dernier tableau (wp_hunter_quote_parts
) ici comme le contenu à montrer, si IsActive = 1
existe dans la dernière table (wp_hunter_quote_parts
). Cependant, si IsActive = 1
n'existe pas dans wp_hunter_quote_parts
pour ItemName
que je voudrais combiner à la fois wp_quantum_purchases
et wp_quantum_sales
comme s'il s'agissait d'une ligne.
Ne peut pas faire LEFT JOIN
car les données pourraient exister dans wp_quantum_purchases
, mais pas dans wp_quantum_sales
OU Les données peuvent exister dans wp_quantum_sales
et non dans wp_quantum_purchases
ou les données ne pouvaient exister dans l'un de ces derniers, et existent seulement dans wp_hunter_quote_parts
ainsi que des données pourrait même pas exister dans wp_hunter_quote_parts
.
Donc, au fond, si ItemName existe dans wp_quantum_purchases
ET IsActive = 1 ET wp_hunter_quote_parts
n'a pas ItemName dans le tableau, obtenir des données d'achat de wp_quantum_purchases
, d'autre si ItemName existe en wp_hunter_quote_parts
obtenir des données de hunter_quote_parts
à la place.
Si ItemName existe dans wp_quantum_sales
ET IsActive = 1 ET wp_hunter_quote_parts
n'a pas de ItemName dans le tableau, obtenir des données de vente de wp_quantum_sales
, d'autre si ItemName existe en wp_hunter_quote_parts
obtenir des données de hunter_quote_parts
à la place.
Comment puis-je combiner la première et la seconde table, plutôt qu'une jointure externe avec une autre table?
Une autre tentative ici:
(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
Figured celui-ci fonctionnerait, mais il semble qu'il ne cesse d'aller et aller et aller, et ne semble pas finir jamais la requête. Pas d'erreurs que je peux voir, mais ne finit jamais ... Et ces tables sont très petites, c'est étrange ...
Vous ne savez pas exactement ce qu'est la création d'une vue. Fondamentalement, j'ai besoin de combiner les 2 premières tables en 1, que de faire une jointure externe sur la dernière table. Si la dernière table a IsActive = 1 où ItemName est trouvé, j'en ai besoin pour retourner ces données de tables à la place. Avoir du sens? –