免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2075 | 回复: 8
打印 上一主题 下一主题

两次select的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-31 15:16 |只看该作者 |倒序浏览
有两个表

mysql> select * from movie;
+----------+----------------+------------+------------+-----------------+----------------+
| movie_id | movie_name     | movie_type | movie_year | movie_leadactor | movie_director |
+----------+----------------+------------+------------+-----------------+----------------+
|        1 | Bruce almighty |          5 |       2003 |               1 |              2 |
|        2 | office space   |          5 |       1999 |               5 |              6 |
|        3 | Grand canyon   |          2 |       1991 |               4 |              3 |
+----------+----------------+------------+------------+-----------------+----------------+

mysql> select * from people;
+-----------+-----------------+----------------+-------------------+
| people_id | people_fullname | people_isactor | people_isdirector |
+-----------+-----------------+----------------+-------------------+
|         1 | jim carrey      |              1 |                 0 |
|         2 | tom shadyac     |              0 |                 1 |
|         3 | lawrence kasdan |              0 |                 1 |
|         4 | kevin kline     |              1 |                 0 |
|         5 | ron livingston  |              1 |                 0 |
|         6 | mike judge      |              0 |                 1 |
+-----------+-----------------+----------------+-------------------+

上面点的那个表叫movie
下面的那个叫people

movie.movie_actor 和 movie.movie_director里面的值对应people.people_id

要求是要显示出电影的名称,导演的名字和演员的名字
也就是 movie_name, movie_actor and movie_director

想了半天没想出
还失眠了

论坛徽章:
0
2 [报告]
发表于 2006-07-31 15:31 |只看该作者
create table t1
as
select movie_name,people_fullname movie_leadactor_name ,movie_director
from movie,people
where  movie_leadactor=people_id;

select  movie_name,people_fullname,movie_leadactor_name,people_fullname movie_director_name
from t1,people
where movie_director=people_id

合在一起写就是如下
select  movie_name,people_fullname,movie_leadactor_name,people_fullname movie_director_name
from t1,people
(
select movie_name,people_fullname movie_leadactor_name ,movie_director
from movie,people
where  movie_leadactor=people_id
)t1
where movie_director=people_id

[ 本帖最后由 talen-t 于 2006-7-31 15:33 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-07-31 15:48 |只看该作者

  1. SELECT X.movie_name, Y.people_fullname, Z.people_fullname
  2. FROM movie X LEFT JOIN people Y ON X.movie_leadactor = Y. people_id
  3.              LEFT JOIN people Z ON X.movie_director = Z. people_id
复制代码

论坛徽章:
0
4 [报告]
发表于 2006-07-31 16:05 |只看该作者
原帖由 rardge 于 2006-7-31 02:48 发表
[code]
SELECT X.movie_name, Y.people_fullname, Z.people_fullname
FROM movie X LEFT JOIN people Y ON X.movie_leadactor = Y. people_id
             LEFT JOIN people Z ON X.movie_director = Z. peop ...


X Y Z 分表代表什么意思?

x = movie table
y = people table
z = ?

论坛徽章:
0
5 [报告]
发表于 2006-07-31 16:06 |只看该作者
原帖由 talen-t 于 2006-7-31 02:31 发表
create table t1
as
select movie_name,people_fullname movie_leadactor_name ,movie_director
from movie,people
where  movie_leadactor=people_id;

select  movie_name,people_fullname,movie_leadac ...



这个.....前提是不能够新增加表....

论坛徽章:
0
6 [报告]
发表于 2006-07-31 16:11 |只看该作者
原帖由 ivyharry 于 2006-7-31 16:05 发表


X Y Z 分表代表什么意思?

x = movie table
y = people table
z = ?

别名~

论坛徽章:
0
7 [报告]
发表于 2006-07-31 16:18 |只看该作者
恩....query确实是正确的
但是有点晕了

为什么XYZ可以这么用呢?
不是应该是
tablename.fieldname的吗?
还是我对这种格式理解有问题?

还是说XYZ在这里并不代表什么意思,只是区分一下?

论坛徽章:
0
8 [报告]
发表于 2006-07-31 16:33 |只看该作者
自己看手册或者书籍学习一下别名的用法吧,这里就是给数据表起个新名字并在之后用新名字访问该数据表。
测试:
select * from people;
select people.* from people;
select people.* from people X; <== 这会报错
select X.* from people X;

因为要两次打开 people 数据表,如果不用别名的话,那么 people.people_fullname 会引起岐义,它不知道用哪一个表的。
另外一个好处就是写的时候少写几个字符,特别是数据表名字较长的情况下。比如 people.people_id 和 X.people_id 哪个输入方便些?

X、Y、Z是我随意取的,不是固定要这几个字母。

论坛徽章:
0
9 [报告]
发表于 2006-08-01 02:04 |只看该作者
多谢楼上的老大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP