2017-07-03 65 views
-1

我有这样的SQL查询:两个连接语句给未知列

SELECT `main_table`.* FROM `ves_brand` AS `main_table` 
INNER JOIN 
    (SELECT DISTINCT value from catalog_product_entity_int 
    where row_id in 
     (select row_id from catalog_product_entity_int 
     WHERE (attribute_id, value) IN ((99, 4)))) AS `t` 
ON main_table.brand_id = t.value 
INNER JOIN `catalog_product_entity` AS `cpeiz` 
ON cpeiz.row_id = catalog_product_entity_int.row_id 
WHERE (cpeiz.attribute_set_id != 19) 

这给了错误: #1054 - Unknown column 'catalog_product_entity_int.row_id' in 'on clause'

即使我设置为列catalog_product_entity_int.row_id一个别名,列始终是“未知”。

+0

是ROW_ID一列catalog_product_entity_int表 – jhenderson2099

+2

我没有按照你想要做的。示例数据和期望的结果将非常有帮助,对您要完成的逻辑的解释也是如此。 –

+1

个人建议:尝试格式化您的SQL语句 看看http://www.sqlstyle.guide/ 正确的格式化SQL语句让您和您的伙伴们更轻松地解决问题并进行所有更改 –

回答

2

catalog_product_entity_int是在你的子查询中定义的,你不能直接从子查询之外引用它。 (认为​​它像一个局部变量,你必须以某种方式将其返回到主查询)

非常依赖于你的数据集,但像这样将工作

SELECT `main_table`.* FROM `ves_brand` AS `main_table` 
INNER JOIN 
    (SELECT DISTINCT value, row_id from catalog_product_entity_int 
    where row_id in 
     (select row_id from catalog_product_entity_int 
     WHERE (attribute_id, value) IN ((99, 4)))) AS `t` 
ON main_table.brand_id = t.value 
INNER JOIN `catalog_product_entity` AS `cpeiz` 
ON cpeiz.row_id = t.row_id 
WHERE (cpeiz.attribute_set_id != 19) 
+0

非常好的主意!它的工作原理!非常感谢 ! – androniennn

+0

请注意,这现在将SELECT DISTINCT更改为VALUE和ROW_ID的不同组合。这可能不是您想要的。 – JeffUK

+0

我加了一个'group by brand_id'。 – androniennn