mysql 按条件join_MySQL join – 根据条件选择表

本文探讨了一种优化SQL查询的方法,涉及如何根据table1.parent_type的值动态连接table2和table3。作者比较了使用UNION与多表连接的性能,并分享了两种不同的查询实现,包括使用IF函数的查询方式。通过查询分析,发现多表连接在某些情况下能显著提高查询速度。
摘要由CSDN通过智能技术生成

我有三个表table1,table2和table2. table1.parent_id是table2或table3中记录的id,具体取决于table1.parent_type的值.现在我想将table1与table2和table3连接起来,具体取决于table1.parent_type的值.

这可以使用UNION完成.但还有其他方法吗?

这是我目前的查询

(SELECT c.*, a.title

FROM table1 c

LEFT OUTER JOIN table2 a

ON c.parent_id = a.id

WHERE c.parent_type = 0)

UNION (SELECT c.*, p.title

FROM table1 c

LEFT OUTER JOIN table3 p

ON c.parent_id = p.id

WHERE c.parent_type = 1)

ORDER BY id DESC

LIMIT 10

更新:这是另一种方法(From Dark Falcon的回复)

SELECT c.*, IF(c.parent_type = 0, a.title, p.title) as title FROM table1 c

LEFT OUTER JOIN table2 a ON c.parent_id = a.id AND c.parent_type = 0

LEFT OUTER JOIN table3 p ON c.parent_id = p.id AND c.parent_type = 1

WHERE a.id IS NOT NULL OR p.id IS NOT NULL ORDER BY id DESC LIMIT 10;

更新2:我使用查询分析器分析了查询.对于我的所有测试运行,多表连接速度提高了100多倍.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值