как записать 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 шт):
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