Все эти соединения SQL логически эквивалентны?

Здесь вы можете найти объяснение, почему вы получаете float64, а не int:

Проверьте документ на Декодировать

См. Документацию для Unmarshal для деталей о преобразовании JSON в значение Go.

blockquote>

И там см.

Чтобы демонтировать JSON в значение интерфейса, Unmarshal сохраняет один из них в значении интерфейса:

blockquote>
float64, for JSON numbers

5
задан Ben 15 July 2012 в 03:23
поделиться

4 ответа

Они логически эквивалентны и должны привести к тому же результату. Однако последний должен быть предпочтен, поскольку он указывает более правильно семантику запроса - т.е. "объединяющие таблицы t1 и t2".

Оператор Where должен использоваться для "фильтрации" результатов соединения - например.

... WHERE t2.some_col > 10

Кроме того, как Constantin сказал в другом ответе, 4 запроса отличались бы, если бы соединением было Внешнее объединение.

5
ответ дан 13 December 2019 в 22:17
поделиться

Они логически эквивалентны. Однако то, где Вы определяете условия объединения, имеет значение относительно того, сколько записей используется во временной таблице, на которую, где применяется пункт. Таким образом,

Если таблица t1, t2 и t3 имела 10 записей каждый, оператор,

SELECT t1.x, t2.y from t1, t2 where t1.a=t2.a and t1.b=t2.b and t1.c = t2.c;

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

Для

SELECT t1.x, t2.y from t1 join t2 on t1.a=t2.a and t1.b=t2.b and t1.c = t2.c;

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

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

Да, как другие заявили, результатом является то же от всех этих запросов.

FWIW, можно также использовать этот краткий синтаксис при выполнении объединения по эквивалентности на именах столбцов, которые являются тем же в обеих таблицах:

SELECT t1.x, t2.y from t1 join t2 using (a, b, c);

До оптимизации это должно быть оптимизировано то же. Таким образом, RDBMS должен быть достаточно умным для анализа WHERE синтаксис то же, и выполняет соединения вместо того, чтобы генерировать промежуточный огромный результат перекрестного объединения и применить условия фильтрации к нему. Это - такой общий тип запроса, что данной реализации RDBMS также свойственно распознать и оптимизировать его.

В случае MySQL, соединения и где (отчасти) оценены вместе. Попытайтесь использовать EXPLAIN проанализировать Ваш запрос. Если"type"столбец указывает"eq_ref"это означает, что это использует индексируемое соединение. Это - лучший тип соединения относительно оптимизации. Если"typeref"это хорошо также.

Можно получить эти типы оптимизации соединения, вставляете ли Вы условие JOIN...ON пункт или WHERE пункт.

2
ответ дан 13 December 2019 в 22:17
поделиться

Для ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ это не имеет никакого логического значения, и оптимизатор должен произвести те же планы. Но для Внешних объединений становится важно, вставляете ли Вы условие ГДЕ или ОТ... Пункт СОЕДИНЕНИЯ. Это вызвано тем, что ОТ и НА пунктах обрабатываются перед оператором Where: ANSI SQL логический запрос, обрабатывающий http://www.sqlmag.com/Files/09/94378/Figure_01.jpg

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

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