SQL 根据另一列中的值从一列中选择值

Joh*_*ohn 2 sql postgresql join where-clause

我有两张桌子。一店“地点”:

TABLE location (
    ID               serial             PRIMARY KEY,
    name             text               NOT NULL,
    description      text               NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

每个位置都有许多行“数据”:

TABLE data(
    ID               smallint           REFERENCES location(ID),
    date             date,               
    rainfall         int                
);
Run Code Online (Sandbox Code Playgroud)

我想找到在给定时期内具有“数据”的所有位置。我已经尝试过这个:

SELECT location.ID, location.name FROM location                    
    JOIN data ON data.id = location.id 
    WHERE (SELECT MIN(data.date) FROM data) <= '$start_date' 
           AND 
          (SELECT MAX(data.date) FROM data) >= '$end_date' 
    ORDER BY location.ID;
Run Code Online (Sandbox Code Playgroud)

但它似乎将 MIN 和 MAX 测试应用于所有数据,而不是应用于每个单独的位置,即测试需要应用于每个位置,并且只返回通过测试的那些位置。

有什么建议么?

Tim*_*sen 5

只需按位置聚合,然后断言子句中的最小值/最大值HAVING

SELECT
    l.ID,
    l.name
FROM location l                 
INNER JOIN data d
    ON d.id = l.id
GROUP BY
    l.ID
HAVING
    MIN(data.date) <= '$start_date' AND
    MAX(data.date) >= '$end_date' 
ORDER BY
    l.ID;
Run Code Online (Sandbox Code Playgroud)