MySQL学习(九)

1 一道面试题
新建两张表

mysql> create table m
    -> (
    -> mid int,
    -> hid int,
    -> gid int,
    -> mres varchar(10),
    -> matime date
    -> )engine myisam charset utf8;
Query OK, 0 rows affected, 1 warning (0.79 sec)
mysql> create table t
    -> (
    -> tid int,
    -> tname varchar(20)
    -> )engine myisam charset utf8;
Query OK, 0 rows affected, 1 warning (0.43 sec)

插入如下数据
1327401-20181231174621900-1234050424.png

1327401-20181231174627967-370032050.png

要求:
1327401-20181231183525827-278712581.png

思考:

1

mysql> select hid,mres,gid,matime from m;

2

mysql> select t.tname, mres,gid,matime from m
    -> left join t
    -> on
    -> m.hid = t.tid;

可以把

m left join t on m.hid = t.tid

这一部分再当成一个表来看

3 初步思路

mysql> select t.tname,mres,gid,matime from
    -> (m left join t on m.hid = t.tid) left join t
    -> on m.gid = t.tid;

报错

ERROR 1066 (42000): Not unique table/alias: 't'

4 修改
错误的原因是 m t t相连,两张t表,名字冲突,起个别名就可以解决

mysql> select t1.tname,mres,t2.tname,matime from
    -> (m left join t as t1 on m.hid = t1.tid) left join t
    -> as t2
    -> on m.gid = t2.tid;

1327401-20181231182205208-2067975019.png

5 进一步

mysql> select t1.tname,mres,t2.tname,matime from
    -> (m left join t as t1 on m.hid = t1.tid) left join t
    -> as t2
    -> on m.gid = t2.tid
    -> where
    -> matime
    -> between '2006-06-01' and '2006-07-01';

转载于:https://www.cnblogs.com/Manual-Linux/p/10202873.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值