как записать SQL запрос чтобы получить кортеж из двух значений одной таблицы и связанного значения другой?

есть две таблицы в бд SQLite3 для работы приложения на Python..\

CREATE TABLE product_table (
 -------------id INTEGER NOT NULL,
 -------------product_name VARCHAR,
 -------------product_type_id INTEGER
 -------------price INTEGER,
 -------------product_photo_id INTEGER,
 -------------PRIMARY KEY (id),
 -------------FOREIGH KEY(product_type_id) REFERENCES product_types (id),
 -------------FOREIGN KEY(product_photo_id) REFERENSES product_photos (id),                      
)

CREATE TABLE product_photos (
 -------------id INTEGER NOT NULL,
 -------------product_id INTEGER,
 -------------telegram_photo_id VARCHAR
 -------------PRIMARY KEY (id),
 -------------FOREIGH KEY(product_id) REFERENCES product_table (id),                 
)

# Третья для полной картины
CREATE TABLE product_types (
 -------------id INTEGER NOT NULL,
 -------------product_type VARCHAR
 -------------PRIMARY KEY (id),                     
)
# Таблицы заполнял через БД браузер вручную, потому что так на тот момент было удобнее..но мог бы и так
conn.execute('INSERT into product_table (product_name, product_type_id, price, product_photo_id) VALUES ("кот", 20, 1, 1)')

conn.execute('INSERT into product_photos (product_id, telegram_photo_id) VALUES (1, "file_id от телергамм")')
conn.commit()

Требуемый вывод [('Кот','20','file_id от телергамм')]

Как вывести первые два - тут все просто execute(f'SELECT product_name, price, product_photo_id FROM product_table WHERE product_type_id={cat_code}').fetchall()
Не понятно именно как добавить в выходной кортеж значение из другой таблицы по связанному полю, Пробую написать через JOIN, но не понимаю как указать WHERE product_type_id==знач, а мне нужно именно по типу "отбирать", который приходит в функцию в качестве cat_code и равен одному из product_types.id поэтому использую fstring.

Нужно решение именно в виде SQL запроса, без alchemy и тд, потому что хочу понять именно сам SQL


Ответы (1 шт):

Автор решения: Akina
SELECT pt.product_name, 
       pt.product_type_id,
       pp.telegram_photo_id
FROM product_table pt
-- Из следующих двух строк - одну выбрать, вторую удалить.
-- Какую выбрать - зависит от логики предметной области.
-- Впрочем, допускаю, что правильным может оказаться третий вариант.
JOIN product_photos pp ON pt.product_photo_id = pp.id
JOIN product_photos pp  ON pp.product_id = pt.id
→ Ссылка