Здесь вы можете найти объяснение, почему вы получаете float64
, а не int
:
Проверьте документ на Декодировать
См. Документацию для Unmarshal для деталей о преобразовании JSON в значение Go.
blockquote>И там см.
Чтобы демонтировать JSON в значение интерфейса, Unmarshal сохраняет один из них в значении интерфейса:
blockquote>float64, for JSON numbers
Они логически эквивалентны и должны привести к тому же результату. Однако последний должен быть предпочтен, поскольку он указывает более правильно семантику запроса - т.е. "объединяющие таблицы t1 и t2".
Оператор Where должен использоваться для "фильтрации" результатов соединения - например.
... WHERE t2.some_col > 10
Кроме того, как Constantin сказал в другом ответе, 4 запроса отличались бы, если бы соединением было Внешнее объединение.
Они логически эквивалентны. Однако то, где Вы определяете условия объединения, имеет значение относительно того, сколько записей используется во временной таблице, на которую, где применяется пункт. Таким образом,
Если таблица 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;
только десять записей находятся во временной таблице перед любым, где пункт (ни один в этом случае) применяется. Второй метод намного быстрее при работе с большими таблицами.
Да, как другие заявили, результатом является то же от всех этих запросов.
FWIW, можно также использовать этот краткий синтаксис при выполнении объединения по эквивалентности на именах столбцов, которые являются тем же в обеих таблицах:
SELECT t1.x, t2.y from t1 join t2 using (a, b, c);
До оптимизации это должно быть оптимизировано то же. Таким образом, RDBMS должен быть достаточно умным для анализа WHERE
синтаксис то же, и выполняет соединения вместо того, чтобы генерировать промежуточный огромный результат перекрестного объединения и применить условия фильтрации к нему. Это - такой общий тип запроса, что данной реализации RDBMS также свойственно распознать и оптимизировать его.
В случае MySQL, соединения и где (отчасти) оценены вместе. Попытайтесь использовать EXPLAIN
проанализировать Ваш запрос. Если"type
"столбец указывает"eq_ref
"это означает, что это использует индексируемое соединение. Это - лучший тип соединения относительно оптимизации. Если"type
ref
"это хорошо также.
Можно получить эти типы оптимизации соединения, вставляете ли Вы условие JOIN...ON
пункт или WHERE
пункт.
Для ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ это не имеет никакого логического значения, и оптимизатор должен произвести те же планы. Но для Внешних объединений становится важно, вставляете ли Вы условие ГДЕ или ОТ... Пункт СОЕДИНЕНИЯ. Это вызвано тем, что ОТ и НА пунктах обрабатываются перед оператором Where: ANSI SQL логический запрос, обрабатывающий http://www.sqlmag.com/Files/09/94378/Figure_01.jpg