как в этом коде полезны ключевые слова "USING" и "ON" - PullRequest
0 голосов
/ 06 октября 2011
SELECT table1.PrimaryKey(Some ID), table2.nameOfSomething
FROM table1
INNER JOIN table2

Вот часть, которую я не понимаю:

USING(id)

этот идентификатор представляет собой внешний ключ table1, а первичный ключ table2

Я действительно не понимаю ..

значения table1.ID:

25 строк:

row 1-5 = 1 , row 6-10 = 2 , row 11-15  = 3 , row 16-20 = 4 , row 21-25 = 5

значения table2.ID:

5 строк:

row 1 = 1 , row 2 = 2 , row 3 = 3 , row 4 = 4 , row 5 = 5

Я проверяю это и получаю другой результат без него, как получается?

Примечание: Таблица1 содержит интересы, Таблица2 содержит категории для этих интересов

не стесняйтесь спрашивать дополнительную информацию

Ответы [ 3 ]

1 голос
/ 06 октября 2011

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

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

1 голос
/ 06 октября 2011

USING указывает, что объединение должно выполняться путем объединения перечисленных столбцов в обеих таблицах. Это

SELECT      t1.col1, 
            t1.col2, 
            t2.col1
FROM        table1 AS t1
INNER JOIN  table2 AS t2
USING       (col1)

совпадает с

SELECT      t1.col1, 
            t1.col2, 
            t2.col1
FROM        table1 AS t1
INNER JOIN  table2 AS t2
ON          t1.col1 = t2.col1

Для справки см. домашнюю страницу MySql .

0 голосов
/ 06 октября 2011
|  Table1:   |   Table2:           |
|  id        |   id  | table1_id   |
|   1        |    1      3         |
|   2        |    2      2         |
|   3        |    3      1         |


Если вы объедините две вышеупомянутые таблицы вместе с USING(id), это будет соответствовать строкам, в которых значение id в Table1 совпадает со значением id в Table2 ...

SELECT * FROM table1 JOIN table2 USING(id)

|  id   | id   table1_id  |
|   1   |  1      3       |
|   2   |  2      2       |
|   3   |  3      1       |


Но id в Table2 может не иметь ничего общего с id в Table1. Если это так, вы можете использовать ON, чтобы точно определить, как вы сопоставляете записи вместе ...

SELECT * FROM table1 JOIN table2 ON table1.id = table2.table1_id

|  id   | id   table1_id  |
|   1   |  3      1       |
|   2   |  2      2       |
|   3   |  1      3       |


Если вы вообще ничего не указываете, вы сопоставляете каждую запись в одной таблице с каждой записью в другой таблице ...

SELECT * FROM table1 CROSS JOIN table2

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