Wpis z mikrobloga

#mysql #sql #programowanie

Hej, próbuję zrobić bazę jak na załączonym obrazku gdzie np. Servings.kcal to automatycznie generowane pole pobierające FoodItems.kcal rodzica i przeliczające kalorie z takich na 100g/100ml, do takich ile podano w Servings.units. I tak wygląda SQL:

CREATE TABLE IF NOT EXISTS DietDB.Servings (
id INT UNSIGNED NOT NULL,
FoodItem_id INT UNSIGNED NOT NULL,
name VARCHAR(255) NOT NULL,
units DOUBLE UNSIGNED NOT NULL,
kcal INT GENERATED ALWAYS AS (SELECT (FoodItems.kcal*units)/100 FROM Servings LEFT JOIN FoodItems ON FoodItems.id = FoodItem_id) VIRTUAL,
carbohydrate DOUBLE UNSIGNED NULL,
carbohydratesugar DOUBLE UNSIGNED NULL,
fat DOUBLE UNSIGNED NULL,
fatsaturated DOUBLE UNSIGNED NULL,
fat
trans DOUBLE UNSIGNED NULL,
protein DOUBLE UNSIGNED NULL,
fibre DOUBLE UNSIGNED NULL COMMENT,
PRIMARY KEY (
id, FoodItemid),
INDEX
fk
ServingsFoodItems1idx (FoodItemid ASC),
UNIQUE INDEX
name
UNIQUE (name ASC),
CONSTRAINT
fkServingsFoodItems1
FOREIGN KEY (
FoodItem_id)
REFERENCES
DietDB.FoodItems (id)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB

No ale nie działa:

ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT (FoodItems.kcal*units)/100 FROM Servings LEFT JOIN FoodItems ON FoodItems' at line 9


Nie wiem nawet jeszcze czy ten JOIN itd. jest dobry, ale chcę żeby cokolwiek zadziałało przez to GENERATED i dalej sobie poradzę. ( ͡° ʖ̯ ͡°)
Dijuna - #mysql #sql #programowanie

Hej, próbuję zrobić bazę jak na załączonym obr...

źródło: comment_HHv16ex2yFRF4sUdn46MzF0MKXmGnS0F.jpg

Pobierz
  • 5
  • Odpowiedz
(select (f.kcal*units)/100 from servings s left join fooditems f ON s.id = f.id)


@6c75726b6572: no ale to jest może i lepszy join, ale nie jest inny jeżeli chodzi o składnię... więc błąd tak samo wyskakje. :P
  • Odpowiedz