Я получаю повторяющееся имя столбца, но на основе значений. Когда я изменяю значение, ошибки нет - PullRequest
1 голос
/ 11 марта 2020

Я пытаюсь использовать этот запрос, но когда в разных столбцах есть одно и то же значение, я получаю эту ошибку:

1060 - повторяющееся имя столбца "123"

Например, здесь :

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

Но когда я изменю значение, ошибок не будет. Например:

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 

Не могли бы вы помочь мне и сообщить, что я делаю неправильно?

1 Ответ

0 голосов
/ 11 марта 2020

Просто удалите внешний SELECT из:

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

, поскольку он извлекает все безымянные столбцы из внутреннего select с именами, которые являются их значениями, поэтому есть 2 столбца с одинаковым именем 123. Смотрите упрощенную демонстрацию проблемы. Используйте это:

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'
) 

Также LIMIT 1 не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...