mysql 必知必会的多表联结问题?
在书中 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)
- 我这样改,效率有变好吗?或者能更好吗?
- 怎么才能让我这种改法,能查到 quantity 列?
表信息:
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;
我把有用的信息都标注出来了。