Естественное соединение MySQL 5.6

Хотелось бы узнать, сколько медалей завоевала страна. Поэтому я решил объединить таблицы www_result и www_country. Они имеют общий атрибут country_id. Пока это мой код, но я получаю синтаксические ошибки и не могу найти причину.

SELECT * FROM www_results WHERE position = 1 OR position = 2 OR position = 3
NATURAL JOIN 
www_countries;

заранее спасибо

1 ответ

Решение

У вас просто все в неправильном порядке, выполните СОЕДИНЕНИЯ, а затем примените предложение WHERE...

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

SELECT
    *
FROM
    www_results
NATURAL JOIN 
    www_countries
WHERE
    www_results.position IN (1, 2, 3)
;

Я также на самом деле рекомендую против NATURAL JOIN тем не мение. Если у вас случайно есть поля с одинаковыми именами, вы получите нежелательное поведение. Я бы использовал явное INNER JOINs.

SELECT
    *
FROM
    www_results
INNER JOIN 
    www_countries
        ON  www_results.country_id = www_countries.country_id
        --  Replace the "country_id" with whatever field you want to join on
WHERE
    www_results.position IN (1, 2, 3)
;
Другие вопросы по тегам