将来自相同列的BETWEEN值与两个不同的列进行比较

问题描述 投票:0回答:1

我将用户上传的图像文件中的无数属性存储在一个表中。表的基本结构如下:

attrib_id | image_id | attrib_name | attrib_value

除了像TAGCAPTION这样的属性外,我还以同样的方式存储图像位置的LATITUDELONGITUDE。所有列都是varchar类型。

我正在尝试查询与给定边界框内的位置相关联的图像 - 输入是上下纬度,开始和结束经度。查询的输出应该是image_ids列表,其中包含name=LATITUDEvalue BETWEEN upper and lower latitude的行,以及经度相同的行。

由于所有的值都是字符串,并且在同一列中,我真的不知道从哪一个开始。

虽然我愿意考虑重组表格,但我的直觉告诉我,有一种方法可以在SQL中实现这一点。

我的数据库目前是MySql,但我将来可能会切换到Postgres,所以我更喜欢非供应商特定的解决方案。

sql
1个回答
0
投票

你可以这样做:

SELECT * FROM Table lat
INNER JOIN Table lon ON lat.image_id = lon.image_id
WHERE (lon.attrib_name = 'LONGITUDE' AND lon.attrib_value BETWEEN start AND end) AND 
(lat.attrib_name = 'LATITUDE' AND lat.attrib_value BETWEEN upper AND lower)

不确定Postgres是否支持BETWEEN或迁移到的任何地方,因此您可以使用<>运算符。

© www.soinside.com 2019 - 2024. All rights reserved.