Как исправить SQL, извлекаемый из неверно заданного идентификатора

#sql #sqlite

Вопрос:

Я пытаюсь подключиться, чтобы связать две таблицы вместе в моей базе данных SQL. У меня это вроде как работает, но моя программа использует неверный столбец идентификатора. Вместо этого следует использовать столбец GenreId, но я не знаю, как это исправить.

У меня такое чувство, что это логическая ошибка, но я не знаю, как ее исправить

 import sqlite3
conn = sqlite3.connect("ShowInformation.db")
c = conn.cursor()
c.execute('''SELECT name,GenreName,GenreID  
FROM Genres
NATURAL JOIN Animes''')
item = c.fetchall()

print (item)

conn.commit()
conn.close()
 

Он возвращает это

 [('Pokemon', 'Action', 1), ('Minecraft', 'Work Life', 3), ('Pokemon', 'Ecchi', 2)]
 

Программа использует идентификатор вместо идентификатора жанра, чтобы получить жанр из таблицы Жанров

SQL-код — Таблица Аниме

 
CREATE TABLE "Animes" (
    "ID"    INTEGER,
    "Name"  TEXT,
    "GenreID"   INTEGER,
    FOREIGN KEY("GenreID") REFERENCES "Genres"("ID"),
    PRIMARY KEY("ID" AUTOINCREMENT)
);
 

Код таблицы жанров:

 CREATE TABLE "Genres" (
    "ID"    INTEGER,
    "GenreName" TEXT,
    PRIMARY KEY("ID" AUTOINCREMENT)
);
 

Содержание таблицы:

введите описание изображения здесь
введите описание изображения здесь

Ответ №1:

Это связано с тем NATURAL JOIN , что вам нужно использовать другое соединение, такое как INNER JOIN (вкратце, используя JOIN неявные средства INNER JOIN ). Попробуйте изменить свой запрос SQLite на этот:

 SELECT name, GenreName, GenreID  
  FROM Genres AS g
  JOIN Animes AS a
    ON a.GenreID = g.ID;