Как выбрать, где список данных является подмножеством всех столбцов в sqlite3 Python - PullRequest
1 голос
/ 22 февраля 2020

У меня есть база данных с 20 столбцами с цифрами, и я пытаюсь найти строки с указанными 5 данными.
try # 1: Failed

>>> c.execute("SELECT * FROM mytable WHERE ('1', '15', '3', '9', '53') IN (col1, col2, ..., col20)")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.OperationalError: row value misused

try # 2: Pass

>>> c.execute("select * from mytable where '1' in (col1, col2, col3) and '15' in (col1, col2, col3)"
<sqlite3.Cursor object at 0x00000246516AF030>

Я не могу использовать способ попытки №2 для работы с 5 данными с 20 столбцами или более данных и более столбцов. это так глупо Есть что-то подобное и работает?

c.execute("SELECT * FROM mytable WHERE ('1', '15', '3', '9', '53') IN (col1, col2, ..., col20)")

1 Ответ

0 голосов
/ 22 февраля 2020

Попробуйте это для таблицы с целочисленным первичным ключом id и 8 столбцами: col1, col2, ....

with 
  list(col) as (VALUES (1), (15), (3), (9), (53)),
  cte as (
    select id, 
      ',' || col1 || ',' || col2 || ',' || col3 || ',' || col4 || 
      ',' || col5 || ',' || col6 || ',' || col7 || ',' || col8 || ',' col 
    from mytable
    )  
select * from mytable
where id in (
  select c.id 
  from cte c inner join list l
  on c.col like '%,' || l.col || ',%' 
  group by c.id 
  having count(*) = (select count(*) from list)
)  

См. Демонстрационную версию .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...