关于sql查询的问题

如下selecta.*fromtest1a,test2b,表a中有数据,表b中没有数据,但是查出来的结果为空,请问这是为什么?能不能帮忙解释一下。... 如下select a.* from test1 a,test2 b,表a中有数据,表b中没有数据,但是查出来的结果为空,请问这是为什么?能不能帮忙解释一下。 展开
 我来答
哎呀……18a91a6
2017-06-29 · TA获得超过4.2万个赞
知道大有可为答主
回答量:7246
采纳率:76%
帮助的人:3041万
展开全部

一、你的代码

select a.*  from test1 a,test2 b

将被系统看作是这样的一个查询:

从表A中取出第1条记录,与表B中的所有的记录组合并列出来。

再从表A中取出第2条记录,与表B中的所有的记录组合并列出来。

再从表A中取出第3条记录,与表B中的所有的记录组合并列出来。

……

再从表A中取出第最后1条记录,与表B中的所有的记录组合并列出来。


二、现在,你的情况是B表中没有数据,所以有:

从表A中取出第1条记录,与表B中的所有的记录组合并列出来。因为B表为空,所以列不出。

再从表A中取出第2条记录,与表B中的所有的记录组合并列出来。因为B表为空,所以列不出。

再从表A中取出第3条记录,与表B中的所有的记录组合并列出来。因为B表为空,所以列不出。

……

再从表A中取出第最后1条记录,与表B中的所有的记录组合并列出来。因为B表为空,所以列不出。

--结果就是,一条记录也没有列出来!

三、我这样说你明白了吗?你还可以在B表中追加1条记录,再试着运行你的语句,再追至有2条记录后,再试,你就会更明白了。


四、一般而言,多数情况下,你的语句应该是类似浆紫的:

select a.*  from test1 a,test2 b where a.id=b.id

更标准的写法是:

select a.*  from test1 a  join test2 b on a.id=b.id
HJ_3000
2017-06-29 · TA获得超过563个赞
知道小有建树答主
回答量:1264
采纳率:78%
帮助的人:57.6万
展开全部
逗号是CROSS JOIN的意思,就是所谓的笛卡尔集。
行数=a*b
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
唐城冬
2017-06-29 · 大家一起学习进步吧!!!
唐城冬
采纳数:915 获赞数:1815

向TA提问 私信TA
展开全部
你这语句复制全了吗?怎么没有这两个表的连接语句啊,如果表b没有数据想显示的话,就用左连接表a在左边
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式