联表查询的妙用:从数据库的大佬那里学习
在处理多表数据关联时,联合查询是不可或缺的手段。今天,我们就向数据库大佬请教一个联合查询的问题。
问题:我们有三个表:strategy、group 和 strategy_group,其中 strategy_group 是 strategy 和 group 的 id 联系对应表。
sql 查询语句:
select * from strategy inner join strategy_group on strategy.id = strategy_group.strategy_id inner join group on strategy_group.group_id = group.id;
登录后复制
挑战:这个查询只返回有 group 联系的 strategy 信息。我们希望能够查询所有 strategy,即使它们没有与 group 联系,并且 gatewaymac 值应该设置为 `null。
解决办法:大佬们建议使用 left join,它可以保留被拼表字段为空的数据。当 left join 时没有对应值的数据字段就是空值 NULL。
改进后的 sql 查询语句:
SELECT strategy.*, IF(gatewaymac IS NULL, 'defaultValue', gatewaymac) AS gatewaymac FROM strategy LEFT JOIN strategy_group ON strategy.id = strategy_group.strategy_id LEFT JOIN group ON strategy_group.group_id = group.id;
登录后复制
这个查询将返回所有 strategy 信息,包括没有与 group 联系的 strategy。gatewaymac 字段对于没有 group 联系的 strategy 将被设置为 `defaultvalue。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
【小浪云服务商 - 服务器12元起 - 挂机宝5元起】
THE END
暂无评论内容