【发布时间】:2017-04-16 19:17:56
【问题描述】:
我创建了以下四个表:
CREATE TABLE "Customer" (
"Customer_ID" INTEGER PRIMARY KEY AUTOINCREMENT,
"First_Name" TEXT NOT NULL,
"Last_Name" TEXT NOT NULL,
"Street_Address" TEXT NOT NULL,
"Apartment_Number" TEXT NOT NULL,
"City" TEXT NOT NULL,
"State" TEXT NOT NULL,
"ZIP" INTEGER NOT NULL,
"Home_Phone" INTEGER NOT NULL,
"Mobile_Phone" INTEGER NOT NULL,
"Other_Phone" INTEGER NOT NULL
);
CREATE TABLE "Donut" (
"Donut_ID" INTEGER PRIMARY KEY AUTOINCREMENT,
"Name" TEXT NOT NULL,
"Description" TEXT NOT NULL,
"Unit_Price" FLOAT NOT NULL
);
CREATE TABLE "Donut_Order" (
"Donut_Order_ID" INTEGER PRIMARY KEY AUTOINCREMENT,
"Customer_ID" INTEGER REFERENCES "Customer" ("Customer_ID"),
"Order_Date" REAL NOT NULL,
"Notes" TEXT
);
CREATE TABLE "Order_Line_Item" (
"Donut" INTEGER NOT NULL REFERENCES "Donut" ("Donut_ID"),
"Donut_Order" INTEGER NOT NULL REFERENCES "Donut_Order"("Donut_Order_ID"),
"Qty" INTEGER NOT NULL,
PRIMARY KEY ("Donut", "Donut_Order")
);
然后我插入了以下数据(为简洁起见被截断):
INSERT INTO Customer ( First_Name, Last_Name, Street_Address, Apartment_Number, City, State, ZIP, Home_Phone, Mobile_Phone, Other_Phone) VALUES('Alvin','Cressfol','1313 Mockingbird Lane','01','Auburn','AL','36801','+3345550480','3345550480','+3345555423');
INSERT INTO DONUT(Name, Description, Unit_Price) VALUES('Plain','Plain Donut','1.50');
INSERT INTO DONUT(Name, Description, Unit_Price) VALUES('Glazed','Glazed Donut','1.75');
INSERT INTO DONUT(Name, Description, Unit_Price) VALUES('Cinnamon', 'Cinnamon Donut','1.75');
INSERT INTO DONUT(Name, Description, Unit_Price) VALUES('Chocolate','Chocolate Donut','1.75');
INSERT INTO DONUT(Name, Description, Unit_Price) VALUES('Sprinkle','Sprinkle Donut','1.75');
INSERT INTO DONUT(Name, Description, Unit_Price) VALUES('Gluten-Free','Gluten-Free Donut','2.00');
INSERT INTO Donut_Order (`Customer_ID`,`Order_Date`) VALUES (1,(DATETIME('now')));
INSERT INTO Order_Line_Item VALUES(1,1,1);
INSERT INTO Order_Line_Item VALUES(1,2,12);
INSERT INTO Order_Line_Item VALUES(1,3,8);
INSERT INTO Order_Line_Item VALUES(1,4,8);
INSERT INTO Order_Line_Item VALUES(1,5,6);
INSERT INTO Order_Line_Item VALUES(1,6,6);
现在我需要复杂的连接来为 Order_ID = 1 时出现的每个 Order_Line_Item 输出一行。输出的格式需要与此类似:
我尝试了以下代码,但它似乎不起作用:
SELECT I.Order_Date ,
ILI.Donut_Order_Number,
substr(C.First_Name," ",C.Last_Name) AS CUSTNAME,
C.Street_Address,
C.CITY,
C.ZIP,
C.Home_Phone,
C.Mobile_Phone,
C.Other_Phone,
C.Apartment_Number,
ILI.Quantity,
ILI.Donut_ID,
D.Name,
D.Description,
D.Unit_Price,
FROM CUSTOMER C
JOIN Donut_Order I ON C.Customer_ID=I.Customer_ID
JOIN Order_LINE_ITEM ILI ON I.Donut_Order_ID = 1
JOIN DONUT D ON ILI.Donut_ID=D.Donut_ID;
我的 SQLite 技能不是那么好,而且我很难弄清楚这一点。提前感谢您的帮助。
【问题讨论】:
-
非常感谢您为错误消息保密。
-
能否将您的查询分解成更小的部分并解释它们的意图?我会对
substr(C.First_Name," ",C.Last_Name)的解释非常感兴趣,参考substr。与C.First_Name||" "||C.Last_Name相比。 -
顺便说一句:欢迎来到 StackOverflow。请参观 stackoverflow.com/tour,学习提出好问题 stackoverflow.com/help/how-to-ask,制作 MCVE stackoverflow.com/help/mcve 如果您正在寻求有关调试代码的帮助,请参阅ericlippert.com/2014/03/05/how-to-debug-small-programs
-
@Yunnosch - 我正在尝试将 First_Name 和 Last_Name 连接为 CUSTNAME。我认为我需要 substr 来做到这一点。
-
@CL - 显示的错误是“错误:靠近第 1 行:靠近“FROM”:语法错误”
标签: sqlite join multiple-tables