2014-11-05 53 views
2

我使用的查询如下错误代码:1060重复的列名 'NA'

INSERT INTO `tbl_contact` (`fname`,`code`,`contact`,`m_address`,`created_date`,`modified_date`,`row_status`) 
SELECT * FROM (SELECT 'LULU CENT','sdfjg','NA','NA',1991-01-01,1990-01-01,'active') 
AS tmp WHERE NOT EXISTS (SELECT `id` FROM tbl_contact WHERE CODE='sdfjg') LIMIT 1 

我得到以下

错误代码:1060 重复的列名 'NA'

我的问题是我不能在我的数据库表的两列中添加相同的数据。

+0

你可以分享你的表结构体?可能你已经将这些字段设置为唯一键。 – Jobayer 2014-11-05 06:04:03

回答

9

当您选择不点名的列,如返回的结果以下

SELECT 'LULU CENT','sdfjg','NA' 

列名称将是相同的相应的列值,即第一列名的常量值是LULU CENT,将第二列名称将为sdfjg,依此类推。

由于您的子查询是以下

SELECT 'LULU CENT','sdfjg','NA','NA',1991-01-01,1990-01-01,'active' 

第三和第四列名是相同的(NA)。您将得到1060错误,如果你把上面的查询中SELECT * FROM (...) AS tmp这样

SELECT * FROM 
(
    SELECT 'LULU CENT', 
    'sdfjg', 
    'NA', 
    'NA', 
    1991-01-01, 
    1990-01-01, 
    'active' 
) 
AS tmp 

您需要在子查询中的每一列设置不同的名称如下

INSERT INTO `tbl_contact` 
(
    `fname`, 
    `code`, 
    `contact`, 
    `m_address`, 
    `created_date`, 
    `modified_date`, 
    `row_status` 
) 
SELECT * FROM 
(
    SELECT 
     'LULU CENT' AS `fname`, 
     'sdfjg' AS `code`, 
     'NA' AS `contact`, 
     'NA' AS `m_address`, 
     1991-01-01 AS `created_date`, 
     1990-01-01 AS `modified_date`, 
     'active' AS `row_status` 
) 
AS tmp WHERE NOT EXISTS (SELECT `id` FROM tbl_contact WHERE CODE='sdfjg') LIMIT 1 
+0

谢谢soooo多 – 2014-11-05 06:08:22