Unknown column error in MySQL query

0

Code:

(SELECT
   TB_INGREDIENTES.ID_INGREDIENTE,
   TB_INGREDIENTES.INGREDIENTE,
   TB_INGREDIENTES.QUANTIDADE_INGREDIENTE_TOTAL,
   TB_INGREDIENTES.FLAG,
   TB_INGREDIENTES.ACRESCIMO,

   TB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTES,
   TB_PRODUTOS_INGREDIENTES.QUANTIDADE_INGREDIENTE_USADO,

   TB_PRODUTOS.ID_PRODUTO,
   TB_PRODUTOS.NOME_PRODUTO,
   TB_PRODUTOS.DESCRICAO_PRODUTO,
   TB_PRODUTOS.TIPO_PRODUTO,
   TB_PRODUTOS.PRECO_PRODUTO
FROM 'TB_INGREDIENTES' 
INNER JOIN TB_PRODUTOS ON TB_PRODUTOS.ID_PRODUTO = 1
WHERE TB_INGREDIENTES.ACRESCIMO = 1)
UNION ALL
(SELECT 
   TB_INGREDIENTES.ID_INGREDIENTE,
   TB_INGREDIENTES.INGREDIENTE,
   TB_INGREDIENTES.QUANTIDADE_INGREDIENTE_TOTAL,
   TB_INGREDIENTES.FLAG,
    CASE
        WHEN TB_INGREDIENTES.ACRESCIMO = 1 THEN 0
        ELSE TB_INGREDIENTES.ACRESCIMO
    END AS ACRESCIMO, 

   TB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTES,
   TB_PRODUTOS_INGREDIENTES.QUANTIDADE_INGREDIENTE_USADO,

   TB_PRODUTOS.ID_PRODUTO,
   TB_PRODUTOS.NOME_PRODUTO,
   TB_PRODUTOS.DESCRICAO_PRODUTO,
   TB_PRODUTOS.TIPO_PRODUTO,
   TB_PRODUTOS.PRECO_PRODUTO
FROM 'TB_PRODUTOS_INGREDIENTES' 
INNER JOIN TB_PRODUTOS ON TB_PRODUTOS.ID_PRODUTO = TB_PRODUTOS_INGREDIENTES.ID_PRODUTO
INNER JOIN TB_INGREDIENTES ON TB_INGREDIENTES.ID_INGREDIENTE = TB_PRODUTOS_INGREDIENTES.ID_INGREDIENTE  
WHERE TB_PRODUTOS_INGREDIENTES.ID_PRODUTO = 1)

Error: (1) Unknown column 'TB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTES' in 'field list'

Tables:

TB_PRODUCTS_INGREDIENTS

TB_PRODUCTS

TB_INGREDIENTES

Iwantedtomakeaselectwiththesecolumns,butyes,theyexistinthetable.Butinthefirstselect,beforeUNIONALL,ifIputthefieldsoftableTB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTESandTB_PRODUTOS_INGREDIENTES.QUANTIDADE_INGREDIENTE_USADO,the MySQL , returns that Error (1) . Now, if I swap those fields, by any number, the query executes normal.

Query code executed with any number

(SELECT
   TB_INGREDIENTES.ID_INGREDIENTE,
   TB_INGREDIENTES.INGREDIENTE,
   TB_INGREDIENTES.QUANTIDADE_INGREDIENTE_TOTAL,
   TB_INGREDIENTES.FLAG,
   TB_INGREDIENTES.ACRESCIMO,

   20, -- Colocando qualquer número
   20, -- Colocando qualquer número

   TB_PRODUTOS.ID_PRODUTO,
   TB_PRODUTOS.NOME_PRODUTO,
   TB_PRODUTOS.DESCRICAO_PRODUTO,
   TB_PRODUTOS.TIPO_PRODUTO,
   TB_PRODUTOS.PRECO_PRODUTO
FROM 'TB_INGREDIENTES' 
INNER JOIN TB_PRODUTOS ON TB_PRODUTOS.ID_PRODUTO = 1
WHERE TB_INGREDIENTES.ACRESCIMO = 1)
UNION ALL
(SELECT 
   TB_INGREDIENTES.ID_INGREDIENTE,
   TB_INGREDIENTES.INGREDIENTE,
   TB_INGREDIENTES.QUANTIDADE_INGREDIENTE_TOTAL,
   TB_INGREDIENTES.FLAG,
    CASE
        WHEN TB_INGREDIENTES.ACRESCIMO = 1 THEN 0
        ELSE TB_INGREDIENTES.ACRESCIMO
    END AS ACRESCIMO, 

   TB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTES,
   TB_PRODUTOS_INGREDIENTES.QUANTIDADE_INGREDIENTE_USADO,

   TB_PRODUTOS.ID_PRODUTO,
   TB_PRODUTOS.NOME_PRODUTO,
   TB_PRODUTOS.DESCRICAO_PRODUTO,
   TB_PRODUTOS.TIPO_PRODUTO,
   TB_PRODUTOS.PRECO_PRODUTO
FROM 'TB_PRODUTOS_INGREDIENTES' 
INNER JOIN TB_PRODUTOS ON TB_PRODUTOS.ID_PRODUTO = TB_PRODUTOS_INGREDIENTES.ID_PRODUTO
INNER JOIN TB_INGREDIENTES ON TB_INGREDIENTES.ID_INGREDIENTE = TB_PRODUTOS_INGREDIENTES.ID_INGREDIENTE  
WHERE TB_PRODUTOS_INGREDIENTES.ID_PRODUTO = 1)

Why does this occur?

Editing

I need the result like this:

Note that the percentages in percent are the additions.

They are defined by the amarelo column by the number acréscimos . So every record that has the% number of% in the column is an addition.

    
asked by anonymous 12.09.2014 / 14:04

2 answers

2

I think you need to join in the first query, try this:

(SELECT
   TB_INGREDIENTES.ID_INGREDIENTE,
   TB_INGREDIENTES.INGREDIENTE,
   TB_INGREDIENTES.QUANTIDADE_INGREDIENTE_TOTAL,
   TB_INGREDIENTES.FLAG,
   TB_INGREDIENTES.ACRESCIMO,

   TB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTES,
   TB_PRODUTOS_INGREDIENTES.QUANTIDADE_INGREDIENTE_USADO,

   TB_PRODUTOS.ID_PRODUTO,
   TB_PRODUTOS.NOME_PRODUTO,
   TB_PRODUTOS.DESCRICAO_PRODUTO,
   TB_PRODUTOS.TIPO_PRODUTO,
   TB_PRODUTOS.PRECO_PRODUTO
FROM 'TB_INGREDIENTES' 
INNER JOIN TB_PRODUTOS ON TB_PRODUTOS.ID_PRODUTO = 1
INNER JOIN TB_PRODUTOS_INGREDIENTES ON TB_PRODUTOS_INGREDIENTES.ID_PRODUTO = TB_PRODUTOS.ID_PRODUTO
WHERE TB_INGREDIENTES.ACRESCIMO = 1)
UNION ALL
(SELECT 
   TB_INGREDIENTES.ID_INGREDIENTE,
   TB_INGREDIENTES.INGREDIENTE,
   TB_INGREDIENTES.QUANTIDADE_INGREDIENTE_TOTAL,
   TB_INGREDIENTES.FLAG,
    CASE
        WHEN TB_INGREDIENTES.ACRESCIMO = 1 THEN 0
        ELSE TB_INGREDIENTES.ACRESCIMO
    END AS ACRESCIMO, 

   TB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTES,
   TB_PRODUTOS_INGREDIENTES.QUANTIDADE_INGREDIENTE_USADO,

   TB_PRODUTOS.ID_PRODUTO,
   TB_PRODUTOS.NOME_PRODUTO,
   TB_PRODUTOS.DESCRICAO_PRODUTO,
   TB_PRODUTOS.TIPO_PRODUTO,
   TB_PRODUTOS.PRECO_PRODUTO
FROM 'TB_PRODUTOS_INGREDIENTES' 
INNER JOIN TB_PRODUTOS ON TB_PRODUTOS.ID_PRODUTO = TB_PRODUTOS_INGREDIENTES.ID_PRODUTO
INNER JOIN TB_INGREDIENTES ON TB_INGREDIENTES.ID_INGREDIENTE = TB_PRODUTOS_INGREDIENTES.ID_INGREDIENTE  
WHERE TB_PRODUTOS_INGREDIENTES.ID_PRODUTO = 1)

Not exactly how you want to return the data but maybe:

INNER JOIN TB_PRODUTOS_INGREDIENTES ON TB_PRODUTOS_INGREDIENTES.ID_PRODUTO = TB_PRODUTOS.ID_PRODUTO

It should be:

INNER JOIN TB_PRODUTOS_INGREDIENTES ON TB_PRODUTOS_INGREDIENTES.ID_PRODUTO = TB_PRODUTOS.ID_PRODUTO AND TB_PRODUTOS_INGREDIENTES.ID_INGREDIENTE = TB_INGREDIENTES.ID_INGREDIENTE

Query Help:

SELECT 
    PI.*,
    I.*,
    P.*
FROM 
    TB_PRODUTOS_INGREDIENTES PI 
INNER JOIN 
    TB_PRODUTO P
    ON PI.ID_PRODUTO = P.ID_PRODUTO
INNER JOIN 
    TB_INGREDIENTE I
    ON PI.ID_INGREDIENTE = I.ID_INGREDIENTE

See if this query returns all the data, and then you filter and put the where you think it should.

    
12.09.2014 / 14:11
2

This happens because you are passing a constant instead of a reference.

Instead of you talking: Give me back the value that is present in the TB_PRODUTOS_INGREDIENTES.ID_PRODUTOS_INGREDIENTES column. You're talking, give me back 20

    
12.09.2014 / 14:11