gpt4 book ai didi

MySQL join - 根据条件选表

转载 作者:可可西里 更新时间:2023-11-01 07:33:43 25 4
gpt4 key购买 nike

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

这可以使用 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

更新:这是另一种方法(来自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 多倍。

最佳答案

如果没有模式,这会有点困难,但按照这些思路应该可以。请注意,您可以在联接的 ON 子句中放置任何条件。为什么要避免使用 UNION?

SELECT c.*, a.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

关于MySQL join - 根据条件选表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4351577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com