Почему этот синтаксис работает в MySQL (сопоставление пар столбцов и пар столбцов)? - PullRequest
4 голосов
/ 25 августа 2009

Просто сейчас мне нужно было сделать что-то вроде следующего запроса, и я был удивлен, что он на самом деле работал как задумано. Однако я не могу найти какую-либо документацию по нему, поэтому я немного боюсь неизвестных побочных эффектов этого. Вот что я написал:

select * from Table1 where (col1, col2) in (select col3, col4 from Table2)

Это похоже на сопоставление пары столбцов со списком пар столбцов. Это то, как это должно работать, или я могу ожидать неприятных сюрпризов в будущем?

1 Ответ

7 голосов
/ 25 августа 2009

Кажется, в руководстве по MySQL есть страница об этом синтаксисе: 12.2.9.5. Подзапросы строки

Один из приведенных примеров (цитата):

SELECT column1,column2,column3
       FROM t1
       WHERE (column1,column2,column3) IN
             (SELECT column1,column2,column3 FROM t2);

Что очень похоже на ваш запрос.

Так что я полагаю, что это официально поддерживается.


На той же странице написано (цитата):

Конструкторы строк допустимы в других контексты также. Например, следующие два утверждения семантически эквивалентный (хотя первый не может быть оптимизирован до MySQL 5.0.26):

SELECT * FROM t1 WHERE (column1,column2) = (1,1);
SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;

Таким образом, даже если предложенный вами синтаксис действителен, второй может быть лучше, если вы можете его использовать, по крайней мере, - и его легче читать / понимать ;-)
И вы найдете множество других материалов о подзапросах на странице 12.2.9. Синтаксис подзапроса


(Да, нелегко найти ^^)

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