sql - 任何方式来识别哪些行是由 where 子句中的哪些条件生成的

标签 sql postgresql-9.1

我有 2 个表,一个包含行程的开始和结束位置,另一个包含该行程期间车辆每分钟的纬度/经度位置。这些表通过 tripID 关联。

类似这样的事情:

trip_table:
TRIPID | DEP | ARR
------------------
1      | CLE | CHI
2      | CLE | ATL
3      | ATL | CLE

position_table:
TRIPID | TIME              | LAT  | LON
-----------------------------------------
2      | May-20-2012T00:23 | 35.4 | -84.2
2      | May-20-2012T00:24 | 35.5 | -84.1
3      | May-21-2012T11:14 | 42.0 | -112.4

我有一个由 2 个条件组成的查询: 1. 拉取行程在特定地点出发/到达的所有位置数据 2. 提取行程经过特定纬度/经度的所有位置数据:

SELECT p.* FROM position AS p 
JOIN trip_table t ON (t.tripid = p.tripid)
WHERE (t.dep = 'CLE' OR t.arr = 'CLE)
OR (p.lat > 34 AND p.lat < 40 AND p.lon > -100 AND p.lon < -90)

我的问题是:是否可以修改此查询来确定结果的哪些行来自第一个条件(即行程在指定位置出发/到达),哪些行来自第二个条件(即行程通过了指定纬度/经度)?

目前我唯一的想法是运行 2 个单独的查询,但如果可以减少查询总数,我想避免这种情况。

如果有一个针对此类问题的标准 SQL 解决方案,那就太好了;如果没有,那么是否有一个特定于 PostgreSQL 的解决方案也可以工作。

编辑:如果有人想知道我为什么要这样做 - 结果位置绘制在 map 上,我想根据它们是来自有界区域还是来自两个到达/出发地点之间对它们进行颜色编码.

最佳答案

你可以尝试这样的事情:

SELECT p.col1, p.col2, p.col3,
     t.dep = 'CLE' OR t.arr = 'CLE' AS first_condition,
     p.lat > 34 AND p.lat < 40 AND p.lon > -100 AND p.lon < -90 AS second_condition
FROM position AS p 
JOIN trip_table t ON (t.tripid = p.tripid)
WHERE (t.dep = 'CLE' OR t.arr = 'CLE')
OR (p.lat > 34 AND p.lat < 40 AND p.lon > -100 AND p.lon < -90)

关于sql - 任何方式来识别哪些行是由 where 子句中的哪些条件生成的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10357410/

相关文章:

sql - 获取 GROUP BY 记录子集的计数

mysql - 用子查询的结果替换子字符串

mysql - LINQ 生成错误查询,错误未知列 (VB.NET MySQL)

sql - 必须出现在 GROUP BY 子句中或在聚合函数中使用

postgresql - 在 PostgreSQL 中使用相关表进行全文搜索

postgresql - 可以使用 Postgres 作为文档数据库吗?

mysql - 需要交叉表 SQL 查询的帮助

MySQL 连接帖子、用户信息和评级的三个表

PostgresQL 为臃肿的表自动化 VACUUM FULL

sql - 在 PostgreSQL 表中查找循环引用?