Как проверить, входит ли в набор одно из нескольких полей? - PullRequest
0 голосов
/ 13 июля 2020

Я генерирую SQL запросов из кода C ++. (sqllite3)

Мне нужно эффективно написать следующий запрос.

SELECT * FROM T
WHERE T.field1 IN (V1, V2, V3, ...) or T.field2 IN (V1, V2, V3, ...);

Как его оптимизировать: не вставлять два раза (V1, V2, V3, ...) или взять устанавливает пересечение (T.field1, T.field2) и (V1, V2, V3, ...) или создает локальную переменную оператора (V1, V2, V3, ...) или что-то еще?

Оператор SQL создается как строка и затем передается в механизм SQL -парсинга.

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Создайте CTE со значениями и используйте его следующим образом:

WITH cte(x) AS (VALUES (V1), (V2), (V3), ....)
SELECT * FROM T
WHERE T.field1 IN (SELECT * FROM cte) 
   OR T.field2 IN (SELECT * FROM cte);
0 голосов
/ 13 июля 2020

Вы можете перевернуть условия:

where v1 in (t.field1, t.field2) or
      v2 in (t.field1, t.field2) or
      . . . 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...