Mysql EXISTS 无法识别之前 table 的别名
Mysql EXISTS not recognizing Alias of previous table
我尝试实现的是以下内容,我有一个带有数据的分层 table。
每个类别可能有 3 个子类别(最多)。
所以我想检查从属子类别是否有子类别(后代),以及在最后的 AND 条件下是否有产品。
问题是我的 ALIAS tree1
在最后一个 AND 条件下无法识别。
/* SQL Error (1054): Unknown column 'tree1.Node_ID' in 'on clause' */
这是我的查询,如有任何帮助,我们将不胜感激。
SELECT tree1.Node_ID, tree1.Bez,
IF(EXISTS(SELECT * FROM `301` as tree2 WHERE tree2.Node_Parent_ID <=> tree1.Node_ID LIMIT 1),1,0) as descendants
FROM `301` as tree1
WHERE tree1.TreeTypNr = 1
AND tree1.Node_Parent_ID <=> 100001
AND EXISTS(
SELECT * FROM `400`
INNER JOIN `302` ON `302`.Node_ID = tree1.Node_ID
WHERE `400`.GenArtNr = `302`.GenArtNr
AND `400`.VknZielNr = 18302
AND `400`.VknZielArt = 2
LIMIT 1
)
我交换了两行:
`400`.GenArtNr = `302`.GenArtNr (put in ON cluase)
和
`302`.Node_ID = tree1.Node_ID (put in WHERE condition)
试试这个:
SELECT tree1.Node_ID, tree1.Bez,
IF(EXISTS(SELECT * FROM `301` as tree2 WHERE tree2.Node_Parent_ID <=>
tree1.Node_ID LIMIT 1),1,0) as descendants
FROM `301` as tree1
WHERE tree1.TreeTypNr = 1
AND tree1.Node_Parent_ID <=> 100001
AND EXISTS(
SELECT * FROM `400`
INNER JOIN `302` ON `400`.GenArtNr = `302`.GenArtNr
WHERE `302`.Node_ID = tree1.Node_ID
AND `400`.VknZielNr = 18302
AND `400`.VknZielArt = 2
LIMIT 1
)
我尝试实现的是以下内容,我有一个带有数据的分层 table。 每个类别可能有 3 个子类别(最多)。 所以我想检查从属子类别是否有子类别(后代),以及在最后的 AND 条件下是否有产品。
问题是我的 ALIAS tree1
在最后一个 AND 条件下无法识别。
/* SQL Error (1054): Unknown column 'tree1.Node_ID' in 'on clause' */
这是我的查询,如有任何帮助,我们将不胜感激。
SELECT tree1.Node_ID, tree1.Bez,
IF(EXISTS(SELECT * FROM `301` as tree2 WHERE tree2.Node_Parent_ID <=> tree1.Node_ID LIMIT 1),1,0) as descendants
FROM `301` as tree1
WHERE tree1.TreeTypNr = 1
AND tree1.Node_Parent_ID <=> 100001
AND EXISTS(
SELECT * FROM `400`
INNER JOIN `302` ON `302`.Node_ID = tree1.Node_ID
WHERE `400`.GenArtNr = `302`.GenArtNr
AND `400`.VknZielNr = 18302
AND `400`.VknZielArt = 2
LIMIT 1
)
我交换了两行:
`400`.GenArtNr = `302`.GenArtNr (put in ON cluase)
和
`302`.Node_ID = tree1.Node_ID (put in WHERE condition)
试试这个:
SELECT tree1.Node_ID, tree1.Bez,
IF(EXISTS(SELECT * FROM `301` as tree2 WHERE tree2.Node_Parent_ID <=>
tree1.Node_ID LIMIT 1),1,0) as descendants
FROM `301` as tree1
WHERE tree1.TreeTypNr = 1
AND tree1.Node_Parent_ID <=> 100001
AND EXISTS(
SELECT * FROM `400`
INNER JOIN `302` ON `400`.GenArtNr = `302`.GenArtNr
WHERE `302`.Node_ID = tree1.Node_ID
AND `400`.VknZielNr = 18302
AND `400`.VknZielArt = 2
LIMIT 1
)