2012-11-10 109 views
1

我有一个查询:MySQL的比较2个表中的值

SELECT a.Vendor, i.Vendor 
FROM whole1 a 
     LEFT JOIN whole2 i 
     ON (a.Vendor = i.Vendor) 
GROUP BY a.Vendor, i.Vedor 
LIMIT 0, 200 

默认情况下INNER JOIN被使用。左连接给我左表的所有结果。与右连接相同。

我在找什么是左右连接的组合,但不是内部加入。

我想有一个像

AMD, NULL 
ACER, NULL 
NULL, INTEL 
NULL, ATI 

导致的任何办法做到这一点?

+0

可以添加样本记录吗? – Pedigree

回答

1

你需要一个full outer join, 这是不幸的是没有在MYSQL实现,而不是可以使用的leftunionright加盟:

SELECT a.`Vendor`, i.`Vendor` 
FROM `whole1` a LEFT JOIN whole2 i ON (a.`Vendor` = i.`Vendor`) 
GROUP BY a.`Vendor`, i.`Vendor` 

UNION 

SELECT a.`Vendor`, i.`Vendor` 
FROM `whole1` a RIGHT JOIN whole2 i ON (a.`Vendor` = i.`Vendor`) 
GROUP BY a.`Vendor`, i.`Vendor` 
+0

LIMIT如何? – marvin

+0

@marvin - 您可以轻松地将“LIMIT”添加到每个选择或联合的结果。 –

+0

你会得到重复的行如果供应商出现在两个表 –

1

使用UNION有左,右加入,并从一个与选择限制

SELECT * FROM (
    SELECT 
    a.`Vendor` v1, i.`Vendor` v2 
    FROM 
    `whole1` a 
    LEFT JOIN 
    whole2 i ON (a.`Vendor` = i.`Vendor`) 
    GROUP BY 
    a.`Vendor`, i.`Vendor` 

    UNION 

    SELECT 
    a.`Vendor`, i.`Vendor` 
    FROM 
    `whole1` a 
    RIGHT JOIN 
    whole2 i ON (a.`Vendor` = i.`Vendor`) 
    GROUP BY 
    a.`Vendor`, i.`Vendor` 
) AS whole 
LIMIT 0,200 

SQL Fiddle

+0

你不需要外'DISTINCT' 。 'UNION'是一个隐含的区别。 [SQL小提琴演示](http://sqlfiddle.com/#!2/960f9/3) –

+0

谢谢你的回答; ) – Grzegorz