Каково различие между “использованием”, и “на” в таблице участвует в MySQL?

Похоже, вам нужна функциональность, такая как группировка по операции. Лучше всего преобразовать его в фрейм данных pandas, а затем создать группу.

import pandas as pd

a = [[0, 1, 0], [1, 2, 1], [2, 2, 1], 
     [3, 0, 0], [4, 0, 1], [5, 1, 2], 
     [6, 0, 1], [7, 1, 0], [8, 1, 2]]

df = pd.DataFrame(a, columns =['index', 'x', 'y'])
grouped_df = df.groupby(['x', 'y']).aggregate(lambda x: tuple(x)).reset_index()

print(grouped_df)

Выход:

   x  y   index
0  0  0    (3,)
1  0  1  (4, 6)
2  1  0  (0, 7)
3  1  2  (5, 8)
4  2  1  (1, 2)
13
задан Joel Coehoorn 3 October 2018 в 03:42
поделиться

5 ответов

Я не использую ИСПОЛЬЗОВАНИЕ синтаксиса с тех пор

  1. большинство моих соединений не подходит для него (не то же имя поля, которое подбирается, и/или несколько соответствий в соединении), и
  2. не сразу очевидно, во что это переводит в случае с больше чем двумя таблицами

т.е. принятие 3 таблиц с 'идентификатором' и 'id_2' столбцами, делает

T1 JOIN T2 USING(id) JOIN T3 USING(id_2)

стать

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)

или

T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)

или что-то еще снова?

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

Заметное отличие для, ГДЕ по сравнению с НА то, если объединение является внешним:

Принимая T1 с единственным полем ID, одной строкой, содержащей значение 1, и T2 с полем ID и VALUE (одна строка, ID=1, VALUE=6), затем, мы добираемся:

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

не дает строк, начиная с, ГДЕ требуется, чтобы соответствовать, тогда как

SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

даст одну строку со значениями

1, NULL, NULL

начиная с НА только требуется для соответствия соединению, которое является дополнительным из-за того, чтобы быть внешним.

15
ответ дан 1 December 2019 в 20:13
поделиться

USING пункт является сокращением от объединения по эквивалентности столбцов, предполагая, что столбцы существуют в обеих таблицах тем же именем:

A JOIN B USING (column1)

A JOIN B ON A.column1=B.column1

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

A JOIN B USING (column1, column2)

A JOIN B ON A.column1=B.column1 AND A.column2=B.column2

Отметьте это USING (<columnlist>) требуется, чтобы иметь круглые скобки, тогда как ON <expr> не требуется, чтобы иметь круглые скобки (хотя parens может использоваться вокруг <expr> просто они могут быть включены вокруг выражения в любом другом контексте).

Кроме того, никакие другие таблицы не участвовали в запросе, может иметь столбец тем именем, или иначе запрос неоднозначен, и необходимо получить ошибку.

Относительно Вас вопрос о дополнительных условиях, принимая Вас используют INNER JOIN это должно логически дать тот же результат запроса, но план оптимизации может быть затронут, в зависимости от реализации RDBMS. Также OUTER JOIN дает другой результат, если Вы включаете условия в соединение по сравнению с WHERE пункт.

11
ответ дан 1 December 2019 в 20:13
поделиться

Я полагаю, что Вы корректны - ИСПОЛЬЗУЯ (xx), стенография для присоединения на двух столбцах с идентичными именами.

Что касается второго вопроса, оба запроса могли быть тем же или могут отличаться в зависимости от реализации планировщика запроса, характерной для базы данных. Для обнаружения для себя (по крайней мере, в пост-ГРЭС) делают ОБЪЯСНИТЬ ВЫБОР..., чтобы видеть, как планы запросов будут выполняться.

1
ответ дан 1 December 2019 в 20:13
поделиться

Ваша интерпретация кажется корректной. Эта статья может помочь.

Что касается второго вопроса, я не вижу, почему результат Вашего третьего примера должен отличаться от того из первых двух. Любое условие в 'НА' пункте имеет то же значение, как будто это было в 'ГДЕ' пункт.

1
ответ дан 1 December 2019 в 20:13
поделиться

Если существует только одно соединение затем нет никакого различия.

Оборотная сторона к пункту использования является оба таблицами, должен иметь то же имя столбца.

1
ответ дан 1 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: