2014-11-05 55 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