Выбор строк, в которых значение двух столбцов встречается в некотором списке кортежей - PullRequest
0 голосов
/ 05 августа 2020

Этот вопрос лучше всего задать на примере.

Рассмотрим таблицу вроде:

Main | P1 | P2
==============
1    | 1  | 1
2    | 1  | 3
3    | 1  | 1
4    | 2  | 3
...

Я хочу выполнить запрос, который возвращает все Main значения, в которых значения P1 и P2 встречаются в списке кортежей.

Например, если бы у меня был список [(1,1), (2,3)], мне нужны были бы строки, где:

  • P1 - 1 и P2 равно 1 ИЛИ, где
  • P1 равно 2 и P2 равно 3.

Для приведенной выше таблицы это будет строки, где Main равно 1, 3 или 4.

Я думаю, что могу добиться этого с помощью чего-то вроде:

SELECT Main 
WHERE CONCAT(P1, P2) IN ("11", "13")

Но я подозреваю, что это выиграло ' Я не использую какие-либо индексы на P1 или P2. Предполагая, что у меня много данных, есть ли лучший способ выполнить этот запрос, который будет использовать индексы?

EDIT

Впоследствии я нашел это вопрос , который тоже отвечает на мой вопрос (я использовал sqlalchemy)

1 Ответ

4 голосов
/ 05 августа 2020

Я думаю, вы просто хотите in с кортежами:

where (p1, p2) in ( (1, 1), (2, 3) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...