многомерное состояние "ГДЕ В"? - PullRequest
3 голосов
/ 27 мая 2020

Как хорошо известно, мы можем упростить

SELECT * FROM A WHERE X=1 OR X=4 OR X=9

следующим образом:

SELECT * FROM A WHERE X IN (1,4,9)

Возможен ли аналогичный ярлык для «многомерных» условий, как показано ниже:

SELECT * FROM A WHERE (X=1 AND Y=2) OR (X=4 AND Y=3) OR (X=9 AND Y=5)

в форме, напоминающей что-то вроде этой

SELECT * FROM A WHERE [X,Y] IN ( [1,2], [4,3], [9,5] )

?

Я хотел бы считать что угодно упрощением, в котором используются символы O (n), где фактор значительно меньше, чем в наивном примере (то есть добавление еще одного случая приводит к увеличению строки запроса менее чем на OR (X=... AND Y=...)), хотя, возможно, есть больше постоянных накладных расходов.

Ответы [ 3 ]

5 голосов
/ 27 мая 2020

Да, вы можете использовать WHERE IN (...) с кортежами в MySQL:

SELECT *
FROM A
WHERE (x, y) IN ((1, 2), (4, 3), (9, 5));

Демо

1 голос
/ 27 мая 2020
select *
from tbl
where (c_a, c_b) in (select c_a, c_b  from tbl_2);

вот демонстрация

0 голосов
/ 27 мая 2020

Вы можете использовать функцию CONCAT с разделителем следующим образом:

SELECT * FROM A WHERE CONCAT(X,'&',Y) IN ( '1&2', '4&3', '9&5' );

или более визуально:

SELECT * FROM A WHERE CONCAT('[', X, ',', Y, ']') IN ( '[1,2]', '[4,3]', '[9,5]' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...