求一个sql语句

cnaaa8 2013-07-01 09:45:21

A表
id kw come
1 尼康 2
2 索尼 1
3 松下 1
4 富士 3

B表
id aid comment web
1 1 不错 1
2 2 很好 2
3 1 怎么样 3




现在的需求是先查询a表come=3的数据(全部字段),然后得到相应的id(这里为4),然后再表B中(字段comment,web)查询web=4且aid=4(aid为A表中得到id的值)的组成一行,如果B表中没有这条数据,相应的字段也列出来,但是为空
如查询come为3的结果(为无数据)

id,kw,come,comment,web
4 富士 3

如果查询A表come为2的,且web为1的(有结果)
id,kw,come,comment,web
1 尼康 2 不错 1

注意请用一条sql语句实现,A表数据在500w以上B表数据在1000w以上,B表中存在多条aid相同的但是web为唯一的数据(aid相同web唯一,aid不同的话,web肯定会重复的),我本来想用连接查询,但是无法实现B表没有数据时,相应的字段为空,我的sql:
SELECT a.*,b.comment,b.webFROM `A` a LEFT JOIN `B` b on a.id=b.id WHERE a.come=3;
...全文
131 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dz215136304 2013-07-29
  • 打赏
  • 举报
回复
select a.*,b.comment,b.web from A,B where A.id=B.aid and A.come=3 and B.web=4;
rucypli 2013-07-01
  • 打赏
  • 举报
回复
select a.*,b.comment,b.web from A,B where A.id=B.aid and A.come=3 and B.web=4; 连接条件应该用a.id=B.aid 另外B的aid加索引 a.id和b。id应该是自增主键吧
wwwwb 2013-07-01
  • 打赏
  • 举报
回复
SELECT a.*,b.comment,b.webFROM `A` a LEFT JOIN `B` b on a.id=b.WEB AND a.id=b.AID WHERE a.come=3
cnaaa8 2013-07-01
  • 打赏
  • 举报
回复
引用 1 楼 wwwwb 的回复:
你的SQL语句应该可以啊,什么问题,举例说明
我的是少写了个条件b.web=4 需求是先查询a表come=3的数据(全部字段),然后得到相应的id(这里为4),然后再表B中(字段comment,web)查询web=4且aid=4(aid为A表中得到id的值)的组成一行,如果B表中没有web=4或者aid=4这条数据,相应的字段也列出来,但是为空 id,kw,come,comment,web 4 富士 3 这样的形式
ACMAIN_CHM 2013-07-01
  • 打赏
  • 举报
回复
语句本身没什么问题。 创建索引如下。 create index yyyyy on A(come); create index xxxxx on B(id);
wwwwb 2013-07-01
  • 打赏
  • 举报
回复
你的SQL语句应该可以啊,什么问题,举例说明
ACMAIN_CHM 2013-07-01
  • 打赏
  • 举报
回复
楼主的SQL语句到底是什么?
引用 楼主 cnaaa8 的回复:
.... eb唯一,aid不同的话,web肯定会重复的),我本来想用连接查询,但是无法实现B表没有数据时,相应的字段为空,我的sql: SELECT a.*,b.comment,b.webFROM `A` a LEFT JOIN `B` b on a.id=b.id WHERE a.come=3;
「已注销」 2013-07-01
  • 打赏
  • 举报
回复
看你的这个表结构像是主表和明细表的关系,所以个人觉得,如果建索引,b表的索引应该建在aid会更有用。
引用 2 楼 ACMAIN_CHM 的回复:
语句本身没什么问题。 创建索引如下。 create index yyyyy on A(come); create index xxxxx on B(id);
「已注销」 2013-07-01
  • 打赏
  • 举报
回复
楼主的sql关联条件不对吧,你说的是【然后再表B中(字段comment,web)查询web=4且aid=4(aid为A表中得到id的值)】 同意4楼的,不过我觉得改成同表比较效率是不是更高一些,完整语句如下: SELECT a.*,b.comment,b.web FROM `A` a LEFT JOIN `B` b on a.id=b.aid AND b.aid=b.web WHERE a.come=xxx

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧