假设a表
id b c
1 21 73
2 21 71
3 23 73
假设b表
id b c
1 65 66
2 65 66
3 65 66
要求:
1、查询a表 中b字段等于21的id
2、取出b表中id符合1条件的
怎么用一句sql表达出来?
sql 多表联查询
答案:4 悬赏:40
解决时间 2021-02-06 09:38
- 提问者网友:霸气大叔
- 2021-02-05 10:54
最佳答案
- 二级知识专家网友:飘零作归宿
- 2021-02-05 12:20
可以用谓词或联结实现:
连接实现:
select * from b join a on b.id=a.id where a.b=21
联结实现的条件是两表id来自同一值域,表示意义相同。在连接时其实两可以作成一个表的:
也就是
id,a.b,a.c,b.b.b.c
但由于空值的问题,导致了部分依赖所以才会拆分成两个表的。
使用谓词实现:
select * from b where id in (select id from a where a.b=21)
这个可以实现两表id来自同一值域,但表示意义不同的情况。也就是说两表中的id有无关性。
相比较而言,连接的方式更快一些,但这种情况是两表来自同一值域,且意义相同,如果不是这种情况,可能得不到你正确的值的。而使用谓词不管意义是否相同,都可以得到正确的值。
玩数据库必须知道这两个表是否具有相关性,也就是设计时的意义,否则优化词句什么的都没有办法去做的!
连接实现:
select * from b join a on b.id=a.id where a.b=21
联结实现的条件是两表id来自同一值域,表示意义相同。在连接时其实两可以作成一个表的:
也就是
id,a.b,a.c,b.b.b.c
但由于空值的问题,导致了部分依赖所以才会拆分成两个表的。
使用谓词实现:
select * from b where id in (select id from a where a.b=21)
这个可以实现两表id来自同一值域,但表示意义不同的情况。也就是说两表中的id有无关性。
相比较而言,连接的方式更快一些,但这种情况是两表来自同一值域,且意义相同,如果不是这种情况,可能得不到你正确的值的。而使用谓词不管意义是否相同,都可以得到正确的值。
玩数据库必须知道这两个表是否具有相关性,也就是设计时的意义,否则优化词句什么的都没有办法去做的!
全部回答
- 1楼网友:不服输就别哭
- 2021-02-05 14:50
select * from b where id in (select id from a where a.b=21)
- 2楼网友:留下所有热言
- 2021-02-05 13:58
1、查询a表 中b字段等于21的id
select a.id from a where a.b=21
2、取出b表中id符合1条件的
一句sql
select * from b where b.id in(select a.id from a where a.b=21)
- 3楼网友:承载所有颓废
- 2021-02-05 13:28
select distinct b.id from a,b where a.b=21 and b.id=1
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯