MySQL内部连接与多行的位置

时间:2014-05-29 19:00:10

标签: mysql sql

我需要以下SQL解决方案:

假设我有一个名为" TRIPS"

的表
[  id ][ Name  ][ Duration]
[  1  ][ Trip1 ][   12    ]
[  2  ][ Trip2 ][   16    ]
[  3  ][ Trip3 ][   5     ] 

每个TRIP访问的国家/地区的另一个表:LOCATIONS

[  tripId ][ country ]
[    1    ][    US   ] <--
[    1    ][    PA   ] <--
[    1    ][    RU   ]
[    2    ][    US   ] <--
[    2    ][    PA   ] <--
[    3    ][    PA   ]
[    3    ][    RU   ]

现在我想要所有TRIPS访问&#34;美国&#34;和&#34; PA&#34;。 所以结果将是1和2,因为他们都访问美国和PA。

我以为我可以使用INNER JOIN但只在LOCATIONS表中占用一行(afaik)

有人可以帮助我吗?

[编辑]

我让它以这种丑陋的方式工作:

SELECT * ,group_concat(distinct(LOCATIONS.country) separator ',') as COUNTRYCODES 
FROM TRIPS left join LOCATIONS on TRIPS.id = LOCATIONS.tripid  
group by TRIPS.id 
having COUNTRYCODES like '%PA%' and COUNTRYCODES like '%US%';

但我认为使用&#34;喜欢&#34;是一个丑陋的解决方案

1 个答案:

答案 0 :(得分:1)

SELECT *, COUNT(DISTINCT tripID) AS cnt
FROM TRIPS
LEFT JOIN LOCATIONS ON TRIPS.id = LOCATIONS.tripID
WHERE LOCATIONS.country IN ('US', 'PA')
GROUP BY TRIPS.id
HAVING cnt = 2

基本上,获取旅行到PA或美国的所有记录,计算旅行次数,并仅返回访问过两个国家的旅行。