sql关联查询

码上中国博客 发布于 2017/02/24 15:50
阅读 150
收藏 1

假如有两个表persion(人员)和order(订单)

persion表结构如下:

id   name
1   张山
2 李四

order表结构如下:

id   persionId     order
1 1 毛巾
2 1 肥皂

           

order中的persionId外键persionId 指向 persion表中的id

现在我想查询某个用户的订单:

比如,我查询张山的订单,发现有两个结果,我查询李四的 订单就该是0个,

我使用

select a.id ,a.name ,count(b.id) order from persion a,order b where a.id = b.persionId    and a.id = 1

这时查询结果为一下结果

id   name   order
1 张山 2

如果上面的sql中的a.id如果换成2,那么我想要的返回结果应该 是如下

id   name   order
2   李四 0(或者null)

那么问题来了,实际运行上面的sql,返回值却是空结果:

id   name   order
     

 

怎么才能获取我想要的结果呢?

加载中
0
张悦_阿花儿
张悦_阿花儿

order加上[],[order]

0
张悦_阿花儿
张悦_阿花儿

order有点类似于关键字的东西,所以直接找找不到,得加上[],另外的还有user

0
尚浩宇
尚浩宇

` 会打这个不,order前后加个这个,

就这么打````````````````````````````````````````````

很好打吧

0
不知道你想干嘛
不知道你想干嘛
select a.id ,a.name ,ISNULL(count(b.id),0) order from persion a LEFT JOIN order b on a.id = b.persionId    and a.id = 2


试下!
0
撰写_记忆
撰写_记忆
SELECT id, name, `order` 
FROM persion
LEFT JOIN (SELECT persionid, COUNT(1) `order`
FROM `order`
GROUP BY persionid) tem ON tem.persionid = persion.id
WHERE id = 2

 

0
咕泡学院
咕泡学院

你用的是  a.id = b.persionId  这叫内连接,出来的结果就是内连接的结果,如果你想要你的结果你可以用左连接。 

左连接的时候可以查出来的结果就是

id name order
2 李四 null

诊断结果 : 内连接、外连接 概念不清

http://gupaoedu.com/

 

0
Eric_张耀耀
Eric_张耀耀

order是关键字,建议换一个别名。另外必须加上group by 否则你的sql语句是会报错的。尝试select a.id,a.name,COUNT(b.id) from t_persion a left join t_order b on a.id=b.pid where a.id=1 GROUP BY a.id 。建表的时候切记不要和关键字打擦边球,表名尽量加上前缀,方便区分。 inner join 和 cross join 是有一定弊端的,尝试外连接,left join 或者 right join

返回顶部
顶部