Статьи / MySQL


USING

USING (column_name(s)) Указывает какой столбец или столбцы должны существовать в обоих таблицах, по нему или им происходит связывание двух таблиц.

строение таблиц:


-------------------
|table1 |
-------------------
|id|title |flag|
-------------------
|1 |Первый |1 |
|2 |Второй |0 |
|4 |Четвертый|1 |
-------------------

----------------------------------
|table2 |
----------------------------------
|id|text |flag|
----------------------------------
|1 |Описание первого текста |1 |
|2 |Описание второго текста |1 |
|3 |Описание третьего текста|1 |
----------------------------------


запрос:

SELECT * FROM `table1` INNER JOIN `table2` USING (`id`);


результат:

---------------------------------------------
|id|title |flag|text |flag|
---------------------------------------------
|1 |Первый|1 |Описание первого текста|1 |
|2 |Второй|0 |Описание второго текста|1 |
---------------------------------------------


Колонка flag дублируется, чтобы отличить один флаг от другого можно использовать AS

SELECT t1.id,t1.title,t1.flag AS flag1,t2.text,t2.flag AS flag2
FROM table1 AS t1
INNER JOIN table2 AS t2 USING (id);


результат:

-----------------------------------------------
|id|title |flag1|text |flag2|
-----------------------------------------------
|1 |Первый|1 |Описание первого текста|1 |
|2 |Второй|0 |Описание второго текста|1 |
-----------------------------------------------


На первый взгляд может показаться что запрос из простого стал очень сложным, но это не так. Давайте разберем его на составные части. Части пойдут в логической последовательности, для большего понимания происходящего.

1. часть Присваивание названиям таблиц псевдонимов

... table1 AS t1
... table2 AS t2 ...


2. часть Объединение таблиц по столбцу id

... FROM table1 AS t1
INNER JOIN table2 AS t2 USING (id);


3. часть Выборка нужных колонок

SELECT t1.id, t1.title, t1.flag AS flag1, t2.text, t2.flag AS flag2 ...


Если рассматривать составление запроса в такой последовательности, то становиться понятно откуда берутся t1 и t2 -псевдонимы названий таблиц.