2010-09-06 54 views
0

我有表的表集团通过寻找差异

Car: 

Id 
Name 
ProductionCountry 

Containers : 

ID (GUID) 
CarId 

我想要得到的容器,其中来自不同国家的

所以现车:

Cars: 
1 BMW X5 DE 
2 BMW X3 DE 
3 AUDI A6 MX 
4 AUDI A1 FR 
5 VOLVO S40 FR 

Containers 
Guid1 1 
Guid1 2 
Guid1 3 
Guid2 4 
Guid2 5 

所以结果我得到GUID1因为在这个容器里有来自不同国家的汽车。

如何编写查询来获取它?

+1

你是不是指Guid1? Guid2和Guid3在每个容器中似乎只有一辆车。 – MartW 2010-09-06 11:52:54

+0

@CodeByMoonlight Guid是一个集装箱代码,所以第一个(guid1)集装箱有3辆汽车(来自德国和墨西哥),第二个集装箱有两辆汽车(两辆来自法国)。 – user278618 2010-09-06 11:54:58

回答

1

问:

如何检索包含汽车从不同的容器国家?

答:

SELECT Containers.ID FROM Containers INNER JOIN Car ON Containers.CarId = Car.Id 
GROUP BY Containers.ID 
HAVING COUNT(DISTINCT ProductionCountry) > 1 
GO 

它是如何工作的?

我们加入汽车上的集装箱汽车唯一标识符。这给我们有关哪些国家的标识是其中集装箱

Guid1 DE 
Guid1 DE 
Guid1 MX 
Guid2 FR 
Guid2 FR 

所以我们组由容器ID的结果和计数独特的国家IDS

Guid1 2 
Guid2 1 

在最后一步,我们筛选的结果只会有那些国家数量多于一个的容器。

Guid1 
1

我觉得(我没有访问的时刻为sql,但我在像猜谜)

select id, count(productioncountry) 
from (
     select distinct id, productioncountry 
     from container c inner join car on car.id = c.CarId) conts 
group by id 
having count(productioncountry) > 1 
+0

嗯..你的查询给了我有一个以上的汽车的容器身份证。我想要拥有另一个生产国的containerineres的id。所以:查询提供第一个容器,它检查桌子上的汽车哪些是它的生产国。第一辆车有De,第二辆车DE,第三辆车在这个容器中有MX,现在我想要这个容器的代码。接下来他检查第二个容器。冷杉汽车在法国已经生产,其次也是,所以我不想要这个集装箱的ID。等...... – user278618 2010-09-06 12:15:37

+0

我已经更新了我的答案 – 2010-09-06 12:23:50