2012-10-08 339 views
0

隨着我的應用程序的擴展,我現在正在更改數據庫的結構;我現在想要控制數據庫中的文件類型。我想從數據庫中已有的文件類型開始。我的數據庫現在有像[簡化] 2表結構:使用SELECT結果更新查詢

tbFiles: pkFileID, fileType, fileName

tblFileType: pkFileType, typeName, typeDesc

我想有一個SELECT查詢更新的輸出到新創建的tblFileType表。我曾嘗試除其他事項:

UPDATE tblFileType 
INNER JOIN 
(SELECT DISTINCT fileType FROM tblFiles) as X 
SET typeName = fileType 

但我似乎總是得到0 row(s) affected

當我運行

SELECT DISTINCT fileType 
FROM `tblFiles` 

我得到Showing rows 0 - 22 (~23 total, Query took 0.0074 sec)

我知道這一定是簡單的,但爲什麼是更新查詢不影響23行?

回答

2

您需要添加一個JOIN條件像ON t1.fileType = x.fileType如下:

UPDATE tblFileType t1 
INNER JOIN 
(
    SELECT DISTINCT fileType 
    FROM tblFiles 
)as X ON t1.fileType = x.fileType 
SET t1.typeName = X.fileType 

更新:由於該表tblFileType是空白的,你將需要使用INSERT類似:

INSERT INTO tblFileType(typeName) 
SELECT DISTINCT fileType 
FROM tblFiles 
WHERE -- a condition here 
+0

感謝您的快速回復。我原本有一個'1'的ON條款,但它沒有做任何事情。你所顯示的查詢有一個'ON'子句,但是'tblFileType'表是空白的,所以沒有什麼可以用'ON'來匹配記錄。當對上面的查詢(t1.fileType - > t1.typeName,x.fileType - > X.fileType)進行小的更正時,仍然返回0個記錄。 – Sablefoste

+0

@SableFoste你可以使用'INSERT INTO ... SELECT'查看我的編輯。 –

+0

非常感謝你,就是這樣!我知道這很明顯,有時我只是得到一個'唔'的時刻! – Sablefoste

1

你只是想填充表 - 不更新任何東西(尤其是因爲什麼都沒有)

INSERT INTO tblFileType(typeName) 
SELECT DISTINCT fileType FROM tblFiles 
+0

謝謝@Randy,它運作良好。 – Sablefoste