是否可以在SQLite中为情侣使用IN Operator
我有一个名为elevation的表,其中包含以下列: lat:双键 长:双键 价值:双倍 当我使用以下语法时,我得到一个行值误用错误 挑选* 从仰角 其中,lat,long在29.42682,81.774118,29.63561,81.622355 虽然此语法有效: 挑选* 从仰角 式中,lat,long=29.42682,81.774118或lat,long=29.63561,81.622355 这是否意味着IN运算符不能用于夫妇?是的,IN运算符可以用于左侧的夫妇。更一般地说,左侧可以是具有多列的行值。看 键入或语句的重复列表的另一种方法是创建一个临时表,其中包含可在子查询表达式中查询的文本值列表。还可以将索引添加到临时表中,以提高其效率是否可以在SQLite中为情侣使用IN Operator,sqlite,Sqlite,我有一个名为elevation的表,其中包含以下列: lat:双键 长:双键 价值:双倍 当我使用以下语法时,我得到一个行值误用错误 挑选* 从仰角 其中,lat,long在29.42682,81.774118,29.63561,81.622355 虽然此语法有效: 挑选* 从仰角 式中,lat,long=29.42682,81.774118或lat,long=29.63561,81.622355 这是否意味着IN运算符不能用于夫妇?是的,IN运算符可以用于左侧的夫妇。更一般地说,左侧可以是具有
CREATE TEMP TABLE IF NOT EXISTS coordinates (lat, long, UNIQUE (lat, long));
INSERT OR IGNORE INTO coordinates VALUES (29.42682, 81.774118), (29.63561, 81.622355);
SELECT *
FROM elevation
WHERE (lat, long) IN coordinates;
请注意较短的引用,因为临时表包含相同数量的字段。可以使用更详细的WHERE-lat,long-IN-SELECT*FROM-coordinates,但这里没有必要这样做 如果您只有几个坐标,您可以直接将它们与IN一起使用,而不是使用temp表,但是如果您有很多坐标,这种方法会更好,尤其是在表上有索引的情况下。你的尝试是如此的接近:
SELECT *
FROM elevation
WHERE (lat, long) IN (VALUES (29.42682, 81.774118), (29.63561, 81.622355));
感谢和。我将在这里总结你的答案,如果我犯了错误,请告诉我
所以有两种方法可以做到这一点
优雅的方式:
它使用VALUES关键字
挑选*
从仰角
式中,lat、long的值分别为29.42682、81.774118、29.63561、81.622355;
以及在有大量数据需要查询时非常有用的优化方式:
它使用一个临时表
如果不存在坐标lat、long,则创建临时表;
从坐标中删除;
插入坐标值29.42682、81.774118、29.63561、81.622355;
挑选*
从仰角
其中lat,坐标中的long;
对第一种语法不起作用,第二种语法起作用。我更正了我的答案,因为Shawn揭示了可以指定文字表行,但保留了它,因为其他答案都提到了这一点。