查询语句优化

半雨微凉丶 2018-08-23 04:58:23
说明:
从4个表中各查询一个字段作为结果,
由于对数据库不熟悉,以下是我自己写的,总感觉哪里不对,求大佬帮忙优化下~
select ta1.no,ta1.name1,ta2.name2,ta3.name3,ta4.name4 from
(select no,name1 from table1)as ta1,
(select no,name2 from table2)as ta2,
(select no,name3 from table3)as ta3,
(select no,name4 from table4)as ta4
where ta1.no=ta2.no and ta1.no=ta3.no and ta1.no=ta4.no

...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
半雨微凉丶 2018-08-23
  • 打赏
  • 举报
回复
ok,感谢!
结帖啦。
吉普赛的歌 版主 2018-08-23
  • 打赏
  • 举报
回复
SELECT ta1.no,
ta1.name1,
ta2.name2,
ta3.name3,
ta4.name4
FROM table1 AS ta1
LEFT JOIN table2 ta2 ON ta1.no=ta2.no
LEFT JOIN table3 ta3 ON ta1.no=ta3.no
LEFT JOIN table4 ta4 ON ta1.no=ta4.no


inner join 改 left join 就可以了
半雨微凉丶 2018-08-23
  • 打赏
  • 举报
回复
感谢两位的回答
我有一点没说清楚,抱歉!
这样的话只有三个条件都满足才能查询出来,能不能查询只符合条件的,不满的就为NULL,比如
ta1.no=ta2.no
ta1.no=ta3.no
ta1.no != ta4.no
那么ta4的字段就设为NULL
吉普赛的歌 版主 2018-08-23
  • 打赏
  • 举报
回复
#1 说的对, 直接连接就好了。
你那种属于隐式连接,而且里面有不必要的嵌套查询, 微软都不推荐这么写的。
SELECT ta1.no,
ta1.name1,
ta2.name2,
ta3.name3,
ta4.name4
FROM table1 AS ta1
INNER JOIN table2 ta2 ON ta1.no=ta2.no
INNER JOIN table3 ta3 ON ta1.no=ta3.no
INNER JOIN table4 ta4 ON ta1.no=ta4.no
chenghangstar 2018-08-23
  • 打赏
  • 举报
回复
你t1,t2,t3,t4之间连接,应该使用JOIN(可以直接JOIN表)。
select ta1.no,ta1.name1,ta2.name2,ta3.name3,ta4.name4
from table1 as ta1
join table2 as ta2 on ta1.no=ta2.no
join table3 as ta3 on ta1.no=ta3.no
join table4 as ta4 on ta1.no=ta4.no

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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