2012-02-03 101 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

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