Попытка внутреннего соединения; появляется с ошибкой или строки не возвращаются? - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в SQL, и в настоящее время я использую MySQL Workbench для экспериментов с базами данных. Я создал пять таблиц и попытался объединить две из них, но, похоже, это не сработало.

Я пытаюсь соединить таблицу "villager_name" с "villager_species". Я установил свои внешние ключи, связанные с другими моими таблицами, в моей таблице "villager_name", включая таблицу видов.

Для справки: Таблица имен сельчан Таблица видов сельчан и у меня во всех моих таблицах девять значений.

Для моего внутреннего соединения я used

select * from villager_name
INNER JOIN villager_species
ON villager_name.vname = villager_species.species;

Изначально я использовал «name» вместо «vname», но это дало мне ошибку, предположительно, потому что это заявленное слово. Вместо этого я изменил его на «vname» и запустил. Когда я пытаюсь это сделать, возвращается 0 строк. В конце концов, я хочу иметь возможность объединить все свои таблицы вместе, чтобы иметь возможность просматривать все данные, но мне нужно сначала изложить этот базовый c синтаксис / идею.

Имя стол вид таблицы

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Я не мог понять, почему он не заполнялся, поэтому я буквально вставил каждое значение в таблицу с помощью

update villager_name set fk_idvillager_species = 1, fk_idvillager_personality = 1,fk_idvillager_style = 1,fk_idvillager_zodiac =1 
where pk_idvillagername = 1;

И я просто изменил числа 1-9. Я уверен, что есть более быстрый / короткий способ сделать это, однако. После того, как я закончил делать это, я использовал свое заявление о присоединении, и он сделал то, что хотел. Вместо того, чтобы использовать *, я указал таблицы, чтобы не просто извлекать столбцы без значений.

0 голосов
/ 15 апреля 2020

Ваш синтаксис в порядке, однако похоже, что вы не объединяетесь в правильных столбцах.

Невозможно точно сказать, не видя ваших фактических данных, но из структур вашей таблицы это выглядит как построенное отношение: villager_name(fk_idvillager_species) -> villager_species(pk_idvillager_species).

Если это так, ваш запрос должен быть:

select * 
from villager_name vn
INNER JOIN villager_species vs 
    on vs.pk_idvillager_species = vn.pk_idvillager_species;

Примечания:

  • с использованием (значимых) псевдонимов таблиц (здесь vn для villager_name и vs для villager_species) облегчает чтение и запись запроса

  • в целом говоря, select * не рекомендуется; лучше перечислить столбцы, которые вы хотите вывести, в предложении from (это также дает вам возможность псевдонимов имен столбцов, чтобы избежать возможных конфликтов)

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