我正在查看这个旧的 SQL 查询。我无法得到的一点是为什么它在同一列上两次内部连接同一个表。我说的是 Table1 和 Table1 以别名“Table1Alias”加入,
SELECT DISTINCT othercolumns,
Table1Alias.columna
FROM maintable
INNER JOIN secondarytable
ON maintable.id1 = secondarytable.a_id1
INNER JOIN table1
ON secondarytable.id2 = table1.id3
INNER JOIN table1 Table1Alias
ON secondarytable.id2 = Table1Alias.id3
INNER JOIN thirdtable
ON table1.id4 = thirdtable.id5
INNER JOIN fourthtable
ON thirdtable.id6 = fourthtable.id7
INNER JOIN fivetable
ON thirdtable.id8 = fivetable.id9
INNER JOIN sixthtable
ON Table1Alias.columna = sixthtable.id10
LEFT JOIN seventhtable
ON thirdtable.id11 = seventhtable.id12
WHERE LEFT(secondarytable.type123, 2) BETWEEN '01' AND '09'
AND secondarytable.type456 = 'cate'
AND table1.type = '0'
AND Table1Alias.columna = 'conn'
Run Code Online (Sandbox Code Playgroud)
ype*_*eᵀᴹ 27
像这样重写查询可能会有所帮助,因此很明显 2 个连接是不同的,即连接是到不同的子集(同一表的):
FROM maintable
INNER JOIN secondarytable
ON maintable.id1 = secondarytable.a_id1
INNER JOIN table1
ON secondarytable.id2 = table1.id3
AND table1.type = '0'
INNER JOIN table1 Table1Alias
ON secondarytable.id2 = Table1Alias.id3
AND Table1Alias.columna = 'conn'
INNER JOIN
...
WHERE LEFT(secondarytable.type123, 2) BETWEEN '01' AND '09'
AND secondarytable.type456 = 'cate'
Run Code Online (Sandbox Code Playgroud)
查看该where子句,被指向的行table1要求列type= '0',而被指向的行table1alias要求列columna= 'conn'。
也许table1同一行有多行id3?
| 归档时间: |
|
| 查看次数: |
4821 次 |
| 最近记录: |