SQL, вставка внешних ключей в таблицу
В поля order_id и quatity нужно тоже вставить значения.
В order_id вставить SELECT id FROM orders WHERE customer_id = 3
В quatity какое-нибудь число. Как вставить?
INSERT INTO sales (product_id, order_id,quatity) SELECT product_id FROM products
WHERE name = 'Масло крестьянское'
-- а дальше как?
Всё целиком
import sqlite3 as sq
products_ = [('Хлеб бородинский', 60),
('Молоко лианозовское', 70),
('Масло крестьянское', 120),
('Майонез Слобода', 250),
('Чай индийский', 650)]
customers_ = [('Иван', 'Селедкин'),
('Ефим', 'Колокольчиков'),
('Алексей', 'Пивоваров'),
('Николай', 'Ольховский'),
('Петр', 'Макаренко')]
with sq.connect("shop.db") as con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS customers")
cur.execute("DROP TABLE IF EXISTS orders")
cur.execute("DROP TABLE IF EXISTS sales")
cur.execute("DROP TABLE IF EXISTS products")
cur.execute("""
CREATE TABLE IF NOT EXISTS customers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
surname TEXT
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS orders (
id INTEGER PRIMARY KEY AUTOINCREMENT,
customer_id INTEGER
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS sales (
product_id INTEGER PRIMARY KEY AUTOINCREMENT,
order_id INTEGER,
quantity INTEGER
)
""")
cur.execute("""
CREATE TABLE IF NOT EXISTS products (
product_id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
price INT
)
""")
cur.executemany("INSERT INTO products VALUES (NULL, ?, ?)", products_)
cur.executemany("INSERT INTO customers VALUES (NULL, ?, ?)", customers_)
cur.execute("""INSERT INTO orders (customer_id) SELECT id FROM customers
WHERE surname = 'Пивоваров' """)
cur.execute("""
INSERT INTO sales (product_id) SELECT product_id FROM products
WHERE name = 'Масло крестьянское'
-- как вставить в поле order_id ключ id из таблицы orders
-- и значение в поле quantity (количество)
""")
cur.execute("""
SELECT * FROM customers JOIN orders ON customers.id = orders.customer_id
""")
cur.execute("""
SELECT * FROM sales
""")
result = cur.fetchall()
print(result)
Ответы (1 шт):
Автор решения: Akina
→ Ссылка
INSERT INTO sales (product_id, order_id, quantity)
SELECT products.product_id, orders.id, 123456
FROM products
CROSS JOIN orders
WHERE products.name = 'Масло крестьянское'
AND orders.customer_id = 3
Примечание. Если условию orders.customer_id = 3
соответствует несколько записей (а это почти наверняка так), то их несколько и будет вставлено, что вряд ли правильно. Должен быть, вероятно, отбор по orders.id, либо какое-то дополнительное ограничение (скажем, запись с максимальным штампом времени создания), по которому выберется только одна запись из orders.