喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
 13  1/2  1  2  > 
     
标题: SQL联接问题  
 
thankcup (thankcup)
注册会员
Rank: 2
初级会员



UID 26979
精华 0
积分 81
帖子 72
金钱 81 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-3-16
状态 离线
SQL联接问题

有两个表 A(a_id,age,name)
B(b_id,a_id,photo,status) 其中a_id对应A表中的a_id
在B表中一个a_id可以存在于多条记录中,但status为primary的a_id只有一个
现在需要取出所有a_id在A表中的所有信息,和在B表中status为primary的记录信息,
大家也要想一下吧。
2007-3-20 04:38 PM#1
查看资料  发短消息  顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1268
帖子 801
金钱 663 喜悦币
威望 0
人脉 605
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] 求兼职!
搞个测试的脚本吧 ...
或者数据的例子




锐升科技
2007-3-20 04:59 PM#2
查看资料  Blog  发短消息  QQ . .   顶部
 
thankcup (thankcup)
注册会员
Rank: 2
初级会员



UID 26979
精华 0
积分 81
帖子 72
金钱 81 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-3-16
状态 离线
[推荐阅读] 太阳现在日偏食了.
对了,取数据时A表中也要加一个条件,age <XX
2007-3-20 05:00 PM#3
查看资料  发短消息  顶部
 
thankcup (thankcup)
注册会员
Rank: 2
初级会员



UID 26979
精华 0
积分 81
帖子 72
金钱 81 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-3-16
状态 离线
[推荐阅读] 请各位高手进来帮忙!!
大概就是这样的
SELECT A.*, B.photo FROM A left join B ON A.a_id=B.a_id WHERE A.age<24 AND B.status='primary",但这样是不行,因为这样的话,如果B表中没有符合status为primary的记录那A表中也取不出age小于24的信息了,现在是想要在B表中没有符合status为primary的情况下也可以取出A表中的信息,

[ 本帖最后由 thankcup 于 2007-3-20 05:11 PM 编辑 ]
2007-3-20 05:08 PM#4
查看资料  发短消息  顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1268
帖子 801
金钱 663 喜悦币
威望 0
人脉 605
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] 请各位高手进来帮忙!!
mysql> select * from testa;
+------+------+----------+
| a_id | age  | name     |
+------+------+----------+
|    1 |   20 | cup      |
|    2 |   22 | think    |
|    3 |   31 | seakingx |
+------+------+----------+
3 rows in set (0.01 sec)

mysql> select * from testb;
+------+------+-------+---------+
| b_id | a_id | photo | status  |
+------+------+-------+---------+
|  101 |    1 | pp1   | primary |
|  102 |    1 | pp2   | primary |
|  103 |    1 | pp3   | aaa     |
|  201 |    2 | pp1   | primary |
|  202 |    2 | pp2   | bbb     |
|  203 |    2 | pp3   | ccc     |
+------+------+-------+---------+
6 rows in set (0.00 sec)

mysql> select C.* from (
    ->  select A.* , B.photo,B.status from testa A left join testb B on A.a_id = B.a_id) C
    -> where (C.status='primary' OR C.status is NULL)
    -> AND C.age < 40
    -> ;
+------+------+----------+-------+---------+
| a_id | age  | name     | photo | status  |
+------+------+----------+-------+---------+
|    1 |   20 | cup      | pp1   | primary |
|    1 |   20 | cup      | pp2   | primary |
|    2 |   22 | think    | pp1   | primary |
|    3 |   31 | seakingx | NULL  | NULL    |
+------+------+----------+-------+---------+
4 rows in set (0.00 sec)




锐升科技
2007-3-20 05:22 PM#5
查看资料  Blog  发短消息  QQ . .   顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1268
帖子 801
金钱 663 喜悦币
威望 0
人脉 605
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] 寻求数据库批量倒入代码
我想应该需要子查询, 第一次先把left联合查出, 然后在加条件,否则如果用 status='primary'  作为条件,如果B不存在对应的记录, status 为NULL,就会去掉了, 所以需要用子查询才能完成。

以上脚本在mysql 5.0 win 测试成功。




锐升科技
2007-3-20 05:25 PM#6
查看资料  Blog  发短消息  QQ . .   顶部
 
thankcup (thankcup)
注册会员
Rank: 2
初级会员



UID 26979
精华 0
积分 81
帖子 72
金钱 81 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-3-16
状态 离线
[推荐阅读] 想问问大家,u9pc722664t5w7IM 这个是什么加密方式
恩,很好。思路很清晰,谢谢,不过是不是先选择再联接好一点,就是把那个age <24放在里面
2007-3-20 05:33 PM#7
查看资料  发短消息  顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1268
帖子 801
金钱 663 喜悦币
威望 0
人脉 605
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] [武汉]诚聘PHP程序员和.NET开发人员
对, 这样效率会高些



锐升科技
2007-3-20 05:35 PM#8
查看资料  Blog  发短消息  QQ . .   顶部
 
thankcup (thankcup)
注册会员
Rank: 2
初级会员



UID 26979
精华 0
积分 81
帖子 72
金钱 81 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-3-16
状态 离线
[推荐阅读] 求助!如何把图片完全调入 然后继续下面的网页内容
服务器版本太低了3.23.58 ,唉
2007-3-20 06:02 PM#9
查看资料  发短消息  顶部
 
thankcup (thankcup)
注册会员
Rank: 2
初级会员



UID 26979
精华 0
积分 81
帖子 72
金钱 81 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-3-16
状态 离线
[推荐阅读] diary.html?uin=zhuxin_j&diary_id=13这个连接是静态叶面,还是动态,怎么做的
好像还是有点问题,如果B表中有两条a_id相同的记录,其中一条的status是primary,那两条都取出来了
2007-3-20 06:46 PM#10
查看资料  发短消息  顶部
 13  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.029820 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP