【 TiDB 版本】V6.5.4
SELECT
t1.*
FROM t1
JOIN (
SELECT *
FROM table2
WHERE condition
) AS t2 ON t1.id = t2.id
join t3 ON t1.id = t3.id
join t4 on t2.id = t4.id
如何通过Hints指定关联顺序?如指定的关联顺序为:t2(子查询别名), t4 ,t1 ,t3 。
【 TiDB 版本】V6.5.4
SELECT
t1.*
FROM t1
JOIN (
SELECT *
FROM table2
WHERE condition
) AS t2 ON t1.id = t2.id
join t3 ON t1.id = t3.id
join t4 on t2.id = t4.id
如何通过Hints指定关联顺序?如指定的关联顺序为:t2(子查询别名), t4 ,t1 ,t3 。
这种为什么要用hint?不是应该调整语句顺序么
sql为啥要这么写呀,是有业务上的考虑吗
SELECT
/*+ LEADING(t2, t4,t1,t3) / t1.
FROM t1
JOIN (
SELECT *
FROM table2
WHERE condition
) AS t2 ON t1.id = t2.id
join t3 ON t1.id = t3.id
join t4 on t2.id = t4.id
这样
t2表为子查询结果的别名,leading里直接指定不生效
SELECT
/*+ LEADING(t2, t4,t1,t3) / t1.
FROM t1
JOIN table2 t2
ON t1.id = t2.id
WHERE condition
join t3 ON t1.id = t3.id
join t4 on t2.id = t4.id
这么写?
大概明白你意思,你的意思是主动把子查询去掉,但我主要还是想问的是在有子查询的情况下如何指定关联顺序?
没看懂这几个join是干嘛的
如果要按照指定的顺序执行join,可以考虑一下straight join的方式来指定
select /*+ STRAIGHT_JOIN() */ t1.*
from (SELECT *
FROM table2
WHERE condition) t2,t4,t1,t3
像这样hint一下看看是否可以。
虽然需要改下下SQL写的顺序,但是STRAIGHT_JOIN() 这种方式确实一种好思路;之前一直在考虑leading,但是leading目前确实无法实现指定这种带子查询的关联顺序。
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。