mysql查询两张表,两张表结构完全一样,一张表是另外一张表的补充,当一张表不存在时查另外一张表

mysql查询两张表,两张表结构完全一样,一张表是另外一张表的补充,当一张表不存在结果时时查另外一张表。假如有表A和表B,A是公共表,B是私有表,先查询表B中是否有id为... mysql查询两张表,两张表结构完全一样,一张表是另外一张表的补充,当一张表不存在结果时时查另外一张表。假如有表A和表B,A是公共表,B是私有表,先查询表B中是否有id为5的结果,如果有就不用查了如果没有再查表A是否有公共的结果。 展开
 我来答
貌似風輕
2018-07-28 · TA获得超过7280个赞
知道大有可为答主
回答量:1672
采纳率:94%
帮助的人:677万
展开全部

这个逻辑很多时候都是在代码中完成的,先查询B表,如果有就返回,如果没有再查询A表

如果一定要用sql完成也是可以的

select *,1 as sort from B where id=5
union
select *,2 as sort from A where id=5
order by sort asc
limit 1

分别查询A、B表中id=5的结果,用union合并。

如果A、B表只有一个表中有数据,那么结果肯定符合预期。

如果两个表都有id为5的数据,那么查询结果是两行。于是这里自定义了一个sort字段,B表为1,A表为2,对两条结果升序排列取第1条。这样就保证了如果A、B表都有数据时最后获取的是B表的数据。

追问
请问下如果使用union all连接不使用sort字段的情况下使用limit 1可以保证是表B优先吗
select * from B where id=5
union all
select * from A where id=5
limit 1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式