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

本文探讨了一种在SQL中根据特定字段值动态选择连接不同表的方法,并对比了使用UNION和多表连接两种方式,发现多表连接在性能上有着显著的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有三个表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

Update :这是另一种方法(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;

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值