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

时间:2018-02-27 17:52:35

标签: sql

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

attrib_id | image_id | attrib_name | attrib_value

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

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

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

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

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

1 个答案:

答案 0 :(得分: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或迁移到的任何内容,因此您只能使用<>运算符。