I am receiving duplicate column name, but based on values. When i change the value, there is no error

amirali sabzehparvar :

I am trying to use this query, but when there are the same value in different columns, I receive this error:

1060 - Duplicate column name "123"

For example here:

INSERT INTO chiro(in_out,chirocov,chirocov2,chiroded,chiromet,
                    chirocovp,chirooop,chirooopmet,chirooopcp, 
                    chirovisit,chirouse,chiromax,chirodedapply,
                    chironum1,chironum2) 
    SELECT * FROM (SELECT 'in', 'no','individual','123','123','20', 
                            '213','21243','10','14','5','2000','yes', 
                            '0','1') AS tmp  
    WHERE NOT EXISTS (SELECT in_out,chirocov,chirocov2,
                            chiroded,chiromet,chirocovp,chirooop,
                            chirooopmet,chirooopcp, chirovisit,chirouse,
                            chiromax,chirodedapply,chironum1,chironum2 
                        FROM chiro 
                        WHERE chirocov='no' 
                        AND chirocov2='individual' 
                        AND chiroded='123' 
                        AND chiromet='123' 
                        AND chirocovp='20' 
                        AND chirooop='213' 
                        AND chirooopmet='213' 
                        AND chirooopcp='10' 
                        AND chirovisit='14' 
                        AND chirouse='5' 
                        AND chiromax='2000' 
                        AND chirodedapply='yes' 
                        AND chironum1='0' 
                        AND chironum2='1') 
    LIMIT 1

But when i change the value, there won"t be any errors. like:

INSERT INTO chiro(in_out,chirocov,chirocov2,chiroded,
                    chiromet,chirocovp,chirooop,chirooopmet,
                    chirooopcp, chirovisit,chirouse,chiromax,
                    chirodedapply,chironum1,chironum2) 
        SELECT * FROM (SELECT 'in', 'no','individual','123','231','20', 
                                '213','21243','10','14','5','2000',
                                'yes', '0','1') AS tmp 
                        WHERE NOT EXISTS (SELECT in_out,chirocov,chirocov2,
                                chiroded,chiromet,chirocovp,chirooop,
                                chirooopmet,chirooopcp, chirovisit,chirouse,
                                chiromax,chirodedapply,chironum1,chironum2 
                        FROM chiro 
                        WHERE chirocov='no' 
                        AND chirocov2='individual' 
                        AND chiroded='123' 
                        AND chiromet='123' 
                        AND chirocovp='20' 
                        AND chirooop='213' 
                        AND chirooopmet='213' 
                        AND chirooopcp='10' 
                        AND chirovisit='14' 
                        AND chirouse='5' 
                        AND chiromax='2000' 
                        AND chirodedapply='yes' 
                        AND chironum1='0' 
                        AND chironum2='1') 
    LIMIT 1 

Could you help me and let me know what I am doing wrong?

forpas :

Just remove the outer SELECT from:

SELECT * FROM (SELECT 'in', 'no','individual','123','123','20', 
               '213','21243','10','14','5','2000','yes', 
               '0','1') AS tmp 

because it retrieves all the unnamed columns from the inner select with names that are their values, so there are 2 columns with the same name 123.
See a simplified demo of the problem.
Use this:

INSERT INTO chiro(
   in_out, chirocov, chirocov2, chiroded, chiromet, chirocovp, chirooop, chirooopmet, chirooopcp,  
   chirovisit, chirouse, chiromax, chirodedapply, chironum1, chironum2
) 
SELECT 'in',  'no', 'individual', '123', '123', '20',  '213', '21243', '10', '14', '5', '2000', 'yes',  '0', '1'
WHERE NOT EXISTS(
  SELECT in_out, chirocov, chirocov2, chiroded, chiromet, chirocovp, chirooop, chirooopmet, chirooopcp,    
         chirovisit, chirouse, chiromax, chirodedapply, chironum1, chironum2 
  FROM chiro 
  WHERE chirocov='no' AND chirocov2='individual' AND chiroded='123' AND chiromet='123' AND chirocovp='20' 
  AND chirooop='213' AND chirooopmet='213' AND chirooopcp='10' AND chirovisit='14' AND chirouse='5' 
  AND chiromax='2000' AND chirodedapply='yes' AND chironum1='0' AND chironum2='1'
) 

Also LIMIT 1 is not necessary.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=291210&siteId=1