在书中 15.2.3 中,让查询订单编号为 20005 的订单中的物品信息。
由于查询列来自三个表,所以书中连接了三个表。
select prod_name, vend_name, prod_price, quantity
from orderitems, products, vendors
where products.vend_id = vendors.vend_id and orderitems.prod_id = products.prod_id and order_num = 20005;
我合计改一下,是不是能更高效,改完查到的东西也一样,但改完就没法查 quantity 列了(来自 orderitems )
SELECT
prod_name,
prod_price,
(SELECT vend_name FROM vendors WHERE vendors.vend_id = products.vend_id) AS vend_name
FROM products WHERE prod_id IN
(SELECT prod_id FROM orderitems WHERE order_num = 20005)
表信息:
CREATE TABLE orderitems
(
order_num int NOT NULL ,#订单号
order_item int NOT NULL ,
prod_id char(10) NOT NULL ,#产品 id
quantity int NOT NULL ,#产品数量
item_price decimal(8,2) NOT NULL ,
PRIMARY KEY (order_num, order_item)
) ENGINE=InnoDB;
CREATE TABLE products
(
prod_id char(10) NOT NULL,#产品 id
vend_id int NOT NULL ,#供应商 id
prod_name char(255) NOT NULL ,#产品姓名
prod_price decimal(8,2) NOT NULL ,#产品价格
prod_desc text NULL ,
PRIMARY KEY(prod_id)
) ENGINE=InnoDB;
CREATE TABLE vendors
(
vend_id int NOT NULL AUTO_INCREMENT,#供应商 id
vend_name char(50) NOT NULL ,#供应商姓名
vend_address char(50) NULL ,
vend_city char(50) NULL ,
vend_state char(5) NULL ,
vend_zip char(10) NULL ,
vend_country char(50) NULL ,
PRIMARY KEY (vend_id)
) ENGINE=InnoDB;
我把有用的信息都标注出来了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.