有两个表的表结构如下:
表ORDER(订单):
字段 | 类型 | 备注 |
ID | Int | 主键 |
ORDER_NAME | Varchar | 订单名称 |
表ORDER_ITEM(订单项):
字段 | 类型 | 备注 |
ITEM_ID | Int | 主键 |
ORDER_ID | Int | 外键,关联ORDER表的主键 |
STATUS | Int | 状态 0:失效 1:生效 |
Class_ID | Int | 所属班级ID |
CREATE TABLE `order` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`ORDER_NAME` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
CREATE TABLE `order_item` (
`ITEM_ID` int(11) NOT NULL AUTO_INCREMENT,
`ORDER_ID` int(11) DEFAULT NULL,
`ITEM_NAME` varchar(255) DEFAULT NULL,
`STATUS` int(255) DEFAULT NULL,
PRIMARY KEY (`ITEM_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
1、要求写一个SQL语句,查询出所有包含失效订单项的订单名称。
SELECT DISTINCT o.ORDER_NAME from `order` o
LEFT JOIN order_item i
on o.id = i.order_id
WHERE STATUS = 0
;
2、要求写一个SQL语句,将所有包含失效订单项的订单名称后面都加(已删除)三个字。
UPDATE `order`
set order_name = CONCAT(order_name,"已删除")
where id in (
SELECT temp.ORDER_ID from
(SELECT DISTINCT i.ORDER_ID
from `order` o
LEFT JOIN order_item i
on o.id = i.order_id
WHERE STATUS = 0)temp
);
知识点
1、exists 子查询 或 in 子查询
2、concat