2014-11-25 123 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