Basit bir reçete veritabanına sahibim, bunun için bir reçete yazacak bir sorgu yazmaya çalışıyorum. ilişkili maddeler ve adımlar. Tarifin kendisi, bileşenlerle (bileşen girdilerinin yeniden kullanımını teşvik etmek için) çoktan çoğa ilişkisine ve adımlarla bire çok ilişkisi vardır (şanslar, bir tarifin diğerine özdeş bir adımı yoktur, bu yüzden gerek yoktur) Yeniden kullanım için burada).SQLite - Çoktan-Çokya ve Bire Çok Sayıda JOIN'lerle Seçim
veritabanı kurulumu böylece gibidir:
_ID İÇ (yinelenen verilerin bir ton oluşturur) tüm masalarda KATILDI kullanarak ben belirli bir tarifi için tüm bilgileri çekmek mümkün değilimCREATE TABLE Recipe (
_id INTEGER PRIMARY KEY,
recipe_name TEXT UNIQUE NOT NULL
);
CREATE TABLE Ingredient (
_id INTEGER PRIMARY KEY,
ingredient TEXT UNIQUE NOT NULL
);
CREATE TABLE RecipeIngredient (
_id INTEGER PRIMARY KEY,
recipe_id INTEGER,
ingredient_id INTEGER,
amount REAL,
FOREIGN KEY (recipe_id) REFERENCES Recipe(_id),
FOREIGN KEY (ingredient_id) REFERENCES Ingredient(_id)
);
CREATE TABLE Step (
_id INTEGER PRIMARY KEY,
instruction TEXT NOT NULL,
number INTEGER NOT NULL,
recipe_id INTEGER,
FOREIGN KEY (recipe_id) REFERENCES Recipe(_id)
);
, ama nerede takılıyorum, verileri anlamlı bir nesne elde etmek için sonuçların ek ayrıştırılmasını gerektirmeden yararlı hale getirmek için bunu nasıl gruplayabilirim/sipariş verebilirim? Bu 2 sorguda (malzemeler için ve bir adım için bir tane) yapmak daha iyi olur mu? Eğer bu düşünüyorsanız
|| recipe || || ingredient|| ||step|| ||step number||
"Recipe One" "Ingredient 1" "Step 1" "1"
"Recipe One" "Ingredient 1" "Step 2" "2"
"Recipe One" "Ingredient 1" "Step 3" "3"
"Recipe One" "Ingredient 2" "Step 1" "1"
"Recipe One" "Ingredient 2" "Step 2" "2"
"Recipe One" "Ingredient 2" "Step 3" "3"
"Recipe One" "Ingredient 3" "Step 1" "1"
"Recipe One" "Ingredient 3" "Step 2" "2"
"Recipe One" "Ingredient 3" "Step 3" "3"
Bize bazı veriler ve istediğiniz sonucu gösterin. Ayrıca bize "ORNER JOIN" öğenizi "yinelenen veriler" ile birlikte gösterir ve bunu düzeltebiliriz. SqlFiddle.com üzerinde çalışan bir örnek oluşturabilirsiniz. Db şemasını yüklemek için 'DDL' metnini kullanın –
@JuanCarlosOropeza daha fazla bilgi ekledi, ancak Thorsten'in cevabını değerlendirerek bunu iki sorguya ayırmaktan daha iyi olacağımı düşünüyorum. –