是否可以在SQLite中为情侣使用IN Operator

是否可以在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运算符可以用于左侧的夫妇。更一般地说,左侧可以是具有

我有一个名为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揭示了可以指定文字表行,但保留了它,因为其他答案都提到了这一点。