MySQL - Найти все строки как минимум с 3 соответствующими столбцами - PullRequest
0 голосов
/ 19 марта 2020

У меня есть таблица, подобная следующей:

Id  | bool1 | bool2 | bool3 | bool4 | boo5 | bool6
100 | 1     | 0     | 1     | 1     | 1    | 0
300 | 0     | 1     | 0     | 1     | 1    | 1
600 | 0     | 0     | 1     | 0     | 1    | 1

Я хотел бы получить все строки, которые имеют по крайней мере 3 соответствующих (истинных) логических значения с данной строкой:

500 | 1 | 1 | 1 | 1 | 0| 1

Итак, Id 100 и Id 300 должны быть возвращены, но не Id 600. Я попробовал несколько вещей, таких как CROSS JOIN и все типы других объединений и подзапросов. Тем не менее, я не мог понять, как решить этот запрос.
Моя проблема здесь не в 6 логических значениях, а в 25, которые нужно сравнивать.

Любая помощь очень ценится.

Скрипка: http://sqlfiddle.com/#! 9 / 18480e

Ответы [ 2 ]

2 голосов
/ 19 марта 2020

Вы, кажется, хотите:

select t.*
from t cross join
     t t500
where t500.id = 500 and
      ( (t.bool1 and t500.bool1) +
        (t.bool2 and t500.bool2) +
        (t.bool3 and t500.bool4) +
        (t.bool4 and t500.bool5) +
        (t.bool5 and t500.bool6)
      ) >= 3

Это предполагает, что соответствующая строка находится в вашей таблице. Если нет:

select t.*
from t cross join
     (select 500 as id, 1 as bool1, 1 as bool2, 1 as bool3, 1 as bool4, 0 as bool5, 1 as bool6
     ) t500
where ( (t.bool1 and t500.bool1) +
        (t.bool2 and t500.bool2) +
        (t.bool3 and t500.bool4) +
        (t.bool4 and t500.bool5) +
        (t.bool5 and t500.bool6)
      ) >= 3
1 голос
/ 19 марта 2020

При соединении таблицы со строкой , заданной , при установленном условии:

select p.*
from product p inner join(select * from product where id = 500) c
on (c.bool1 = p.bool1) + (c.bool2 = p.bool2) + (c.bool3 = p.bool3) + 
   (c.bool4 = p.bool4) + (c.bool5 = p.bool5) + (c.bool6 = p.bool6) >= 3
where p.id <> c.id  

См. Демонстрационную версию . Результаты:

| ID  | bool1 | bool2 | bool3 | bool4 | bool5 | bool6 |
| --- | ----- | ----- | ----- | ----- | ----- | ----- |
| 100 | 1     | 0     | 1     | 1     | 1     | 0     |
| 300 | 0     | 1     | 0     | 1     | 1     | 1     |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...