2017-07-03 54 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