我想使用这个查询,没有JOIN子句它工作得很好,所以tablex。索引已经存在
SELECT tablex.name , owner , hotspot.name
FROM tablex, mysecondDB_hotspot AS hotspot
LEFT JOIN roaming_groups ON roaming_groups.nas=tablex.name
LEFT JOIN rates ON rates.rate=tablex.rate
LEFT JOIN rates AS rates2 ON rates2.rate=tablex.rate2
WHERE tablex.name="dLAN1310162210002353" and SUBSTR(tablex.name,5) = hotspot.hotspot_id
但是我得到错误1054:未知的'nase .name'在'on子句'
您正在混合旧式和新式连接。简单规则:永远不要在FROM
子句中使用逗号。
将其替换为CROSS JOIN
将解决您的问题:
SELECT tablex.name , owner , hotspot.name
FROM tablex CROSS JOIN
mysecondDB_hotspot hotspot LEFT JOIN
roaming_groups
ON roaming_groups.na s= tablex.name LEFT JOIN
rates
ON rates.rate=tablex.rate LEFT JOIN
rates rates2
ON rates2.rate = tablex.rate2
WHERE tablex.name = 'dLAN1310162210002353; and
SUBSTR(nases.name,5) = hotspot.hotspot_id
请注意,您的WHERE
子句正在将您的LEFT JOIN
s转换为INNER JOIN
s(尽管我已经离开了原始的连接逻辑)。
问题是在ON
子句中使用了tablex
,而不是WHERE
子句。
虽然,
在功能上等同于CROSS JOIN
,但在语义上并不等同。当使用逗号时,前后部分是分开解析的,所以第二部分不能识别第一部分的别名。