2017-08-08 48 views
0

我有兩個表:stops_jena它已停在它(每個站只出現一次)和trips_clean其中有相同的停止,但多次。還有一個名爲vehicle的列有三個不同的值。 對於每一站,我想要一列說true如果這個站的車輛是'巴士'。Postgresql:「CASE」基於另一個表

picture of stops_jena

WITH trips_stops_bus as (
    SELECT DISTINCT stop_name as stop 
    FROM hafas.trips_clean 
    WHERE hafas.trips_clean.vehicle = 'bus' 
) 

SELECT 
    DISTINCT stops_jena.stop_name, 
    case when stops_jena.stop_name = trips_stops_bus.stop then 'true' else 'false' end as bus 
FROM hafas.stops_jena, trips_stops_bus 
ORDER BY stops_jena.stop_name 

這是我的查詢,但它給出了一個停止兩次列巴是真正look here

+0

今天提示:切換到現代,明確的'JOIN'語法。易於編寫(沒有錯誤),更易於閱讀(和維護),並且在需要時更容易轉換爲外部聯接。 – jarlh

+0

感謝您的評論。你能給我舉個例子嗎? – gemo1011

回答

0

我使用IN-conditon,所以停止只能出現一次:

WITH trips_stops_bus as (
SELECT DISTINCT stop_name as stop 
FROM hafas.trips_clean 
WHERE hafas.trips_clean.vehicle = 'bus' 
    ) 

SELECT 
    DISTINCT stops_jena.stop_name, 
    case when stops_jena.stop_name IN (SELECT stop from trips_stops_bus) then 'true' else 'false' end as bus 'false' end as bus 
FROM hafas.stops_jena, trips_stops_bus 
ORDER BY stops_jena.stop_name