2013-10-20 90 views
0

我正在做一個數據庫課程,我有一個問題,我似乎無法得到正確的答案。顯示兩行相差一個值,但在其他方面相同

有3個表:

country(code, iso_abbreviation, name) 
area(name, city, country_code, latitude, longitude, elevation) 
attraction(name, type, city, country_name, latitude, longitude, elevation) 

現在的問題問這樣的:區域均吸引力和區域表中找到。列表

(country_abbreviation, area_name, latitude, longitude, elevation) 

適用於5000英尺高度以上的所有區域。由於該地區與吸引力數據之間可能存在不一致,因此緯度,經度和高度可能會有所不同。在這種情況下,顯示數據的兩種變體。

所以我想出了下面的查詢,但我不確定它是否正確配對,它也不會將數據分成兩行,其中一個(latitude, longitude, elevation)元素是不同的。

SELECT country.iso_abbreviation as country_abbreviation, area.name as name, 
area.latitude, area.longitude, area.elevation 
FROM area JOIN country on country.code = area.country_code 
     JOIN attraction on area.name = attraction.name 
WHERE area.elevation > 10000 

UNION 

SELECT DISTINCT country.iso_abbreviation as country_abbreviation, area.name, 
attraction.latitude, attraction.longitude, attraction.elevation 
FROM area JOIN country on country.code = area.state_code 
     JOIN attraction on area.name = attraction.name 
WHERE attraction.elevation > 10000 ORDER BY country_abbreviation 
; 

有人能幫我解決這個問題嗎?

+0

請把第二個,不相關的問題成爲一個單獨的問題。你可以隨時鏈接到這個上下文。至於你的主要問題:目前還不清楚。這些表格如何相關?請聲明主鍵和外鍵。添加您的Postgres版本。修復5000和10000之間的不匹配 –

回答

0

這會做你的描述:

WITH cte AS (
    SELECT c.iso_abbreviation AS country_abbreviation 
     , a.name, a.latitude, a.longitude, a.elevation 
    FROM area  a 
    JOIN country c ON c.code = a.country_code 
    WHERE a.elevation > 5000 
    ) 
SELECT * FROM cte 
UNION 
SELECT c.country_abbreviation 
    , t.name, t.latitude, t.longitude, t.elevation 
FROM cte  c 
JOIN attraction t USING (name)  -- assuming name links area & attraction (?) 
ORDER BY country_abbreviation, name -- (?) 

但說實話,表格佈局以及您已獲得任務似乎不清楚。

相關問題