我需要以下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;是一个丑陋的解决方案
答案 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或美国的所有记录,计算旅行次数,并仅返回访问过两个国家的旅行。