2012-02-03 105 views
0

我有2个表,CAR_1和CAR_2。表CAR_1比CAR_2包含更多列和更多记录。mysql-表比较错误

运行下面返回查询4647个记录:

(SELECT CAR_1.ID FROM CAR_1, CAR_2 WHERE 
CAR_1.ID = CAR_2.ID AND 
CAR_1.MODEL = CAR_2.MODEL AND 
CAR_1.SYMBOL = CAR_2.SYMBOL AND 
CAR_1.MAKE = CAR_2.MAKE AND 
CAR_1.ORIGIN = CAR_2.ORIGIN) AS table_all 

在运行相同的查询,而最后2列比较返回4600条记录。

(SELECT CAR_1.ID FROM CAR_1, CAR_2 WHERE 
CAR_1.ID = CAR_2.ID AND 
CAR_1.MODEL = CAR_2.MODEL AND 
CAR_1.SYMBOL = CAR_2.SYMBOL) AS table_min 

我想获得47条记录,其品牌和产地不同,所以我尝试下面的SQL,但它似乎没有正常工作

select * from (SELECT CAR_1.ID FROM CAR_1, CAR_2 WHERE 
CAR_1.ID = CAR_2.ID AND 
CAR_1.MODEL = CAR_2.MODEL AND 
CAR_1.SYMBOL = CAR_2.SYMBOL AND 
CAR_1.MAKE = CAR_2.MAKE AND 
CAR_1.ORIGIN = CAR_2.ORIGIN) AS table_all 
WHERE NOT EXISTS(
(SELECT CAR_1.ID FROM CAR_1, CAR_2 WHERE 
CAR_1.ID = CAR_2.ID AND 
CAR_1.MODEL = CAR_2.MODEL AND 
CAR_1.SYMBOL = CAR_2.SYMBOL) AS table_min 
WHERE table_all.ID = table_min.ID 
) 

如果我将不胜感激有人可以告诉我的错误

+0

有没有可能使得和起源是'NULL'? – vulkanino 2012-02-03 16:01:09

回答

1

是不是很简单:

SELECT 
    CAR_1.ID 
FROM 
    CAR_1, CAR_2 
WHERE 
    CAR_1.ID = CAR_2.ID AND 
    CAR_1.MODEL = CAR_2.MODEL AND 
    CAR_1.SYMBOL = CAR_2.SYMBOL AND 
    (CAR_1.MAKE <> CAR_2.MAKE OR CAR_1.ORIGIN <> CAR_2.ORIGIN); 

+0

哦,是的..感谢很多:) – Kim 2012-02-03 16:11:30

1
SELECT CAR_1.ID FROM CAR_1 
outer join CAR_2 On 
CAR_1.ID = CAR_2.ID 
AND CAR_1.MODEL = CAR_2.MODEL 
AND CAR_1.SYMBOL = CAR_2.SYMBOL 
AND CAR_1.MAKE = CAR_2.MAKE 
AND CAR_1.ORIGIN = CAR_2.ORIGIN 
Where Car2.id is null 

会给你所有汽车的ID在CAR1没有匹配的记录在CAR2

效率比存在,或者不子查询。