Выберите запрос по паре столбцов в предложении where - PullRequest
0 голосов
/ 05 марта 2019

Табличные записи содержат

Records
{
  UniqueId varchar(128),
  Key      varchar(128),
  Values   varchar(128)
};

UniqueId Key Values

2001     F    1      
2001     G    2      
2002     F    1      
2002     M    1      
2003     F    1      
2003     G    2      
2003     Z    3      

Пользователь даст мне StringMap из Key и value.мы должны вернуть уникальный идентификатор

пользовательский ввод

Key value

F    1
G    2

Мой ожидаемый результат - 2001 и 2003

Я получаю ошибку ниже при использовании запроса ниже:

select DISTINCT (AppId) from ApplicationCustomRecords where (Key,values) in (VALUES ('A','1'), ('C','1')) 

Ошибка: рядом с ",": синтаксическая ошибка Версия Sqlite3 - 3.7.3

1 Ответ

0 голосов
/ 05 марта 2019

Ваша идея об использовании значений строк работает отлично; проблема в том, что вы используете очень старую версию sqlite, которая не поддерживает эту функцию (она была добавлена ​​в 3.15.0). С более свежим выпуском:

$ sqlite3
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> CREATE TABLE test(key, val);
sqlite> INSERT INTO test VALUES ('A', 1), ('B', 2), ('C', 3);
sqlite> SELECT * FROM test WHERE (key, val) IN (VALUES ('A', 1), ('B', 2));
key         val       
----------  ----------
A           1         
B           2         

Так что обновите свою версию sqlite (лучший вариант) или перепишите запрос, чтобы не использовать значения строк.

...