2014-11-25 121 views
-4

如何結合mySQL的名稱和批號的所有數據合併後,在兩個表之間檢索不同產品的不同狀態。如何編寫sql語句

SELECT c.name, c.lot_no, t1 AS Product 1, t2 AS Product 2 
FROM (SELECT name, lot_no FROM table_product1 
UNION SELECT name, lot_no FROM table_product2) c 
RIGHT JOIN                     table_product1.status t1 ON ((c.name = name) AND (c.lot_no = lot_no)) 
RIGHT JOIN 
table_product2.status t2 ON ((c.name = name) AND (c.lot_no = lot_no)) 

table_product1:姓名,lot_no,狀態

table_product2:姓名,lot_no,狀態 - >表C:姓名,lot_no,狀態產品1,產品狀態2

回答

0

通過做正確加入兩個狀態表,你排除了任何兩個狀態表都沒有的產品。你可以試試這個:

SELECT 
    c.name 
    ,c.lot_no 
    ,t1.status AS "Product 1" 
    ,t2.status AS "Product 2" 
FROM (
    SELECT name, lot_no FROM table_product1 
    UNION 
    SELECT name, lot_no FROM table_product2 
) c 
JOIN table_product1 t1 ON ((c.name = name) AND (c.lot_no = lot_no)) 
JOIN table_product2 t2 ON ((c.name = name) AND (c.lot_no = lot_no)) 

這應該給你一個空的一方或兩列,如果您還沒有該產品相關的狀態。如果你想消除兩列空值,可以補充一點:。

WHERE t1.status is not null and t2.status is not null 

(我假設有在T1和T2的列名爲「狀態」如果列名是不同的,你」我需要改變這種情況。)

+0

yup。列名是不同的。這就是爲什麼即時通訊瘋狂的代碼。我不知道要解決它 – den 2014-11-25 07:58:46

+0

我的回答有幫助嗎?你弄明白了嗎?你還需要更多的幫助嗎? (對不起,這段話有一段時間沒有了。) – Derek 2015-06-12 06:14:43