2016-05-23 43 views
0

我試圖將數據插入到清單表中,從單獨的Users表中抽取UserID以填充其中一個字段。MySQL使用內部連接插入到表中

Inventory: 
ProductID | PurchasedByUser | OtherAttributes 

和用戶表;

Users: 
DBID | UserActive | UserName 
    1 |  1  | mathew 

到目前爲止,我的SQL是這樣的:

INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes) 
SELECT 23, U.DBID, 'Yellow' 
FROM Inventory U INNER JOIN Users ud 
ON U.DBID = ud.DBID AND ud.UserActive = 1 AND UserName = 'mathew' 

編輯: 我希望能夠做一個SQL INSERT請求補充 產品ID(INT),PurchasedByUser(Users.DBID) ,OtherAttributes(String)添加到Inventory表,而不公開DBID並僅傳遞UserName字段。

+2

爲什麼你想從'Inventory'選擇?並引用你的靜態值,如黃色和馬修。 –

+1

什麼是23,什麼是黃色?你將SELECT和INSERT混合在一起。這是一個完全無效的查詢 – dimlucas

+0

@dimlucas你是不是正確=> http://dev.mysql.com/doc/refman/5.7/en/insert-select.html – xAqweRx

回答

0

CHANGE U.DBID TO ud.DBID

INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes) 
SELECT 23, ud.DBID, 'Yellow' 
FROM Inventory U INNER JOIN Users ud 
ON U.PurchasedByUser = ud.DBID AND ud.UserActive = 1 AND ud.UserName = 'mathew'; 
0

在您構建的SQL查詢中,您指的是庫存表U的DBID。從您共享結構,我想你想下面的查詢:

INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes) 
SELECT 23, ud.DBID, Yellow 
FROM Inventory U INNER JOIN Users ud 
ON U.PurchasedByUser= ud.DBID AND ud.UserActive = 1 AND UserName = 'mathew' 

我還是什麼都試圖在這裏實現困惑,你是從庫存獲取價值,並再次將其回..不知道關於那..只是試圖幫助你找出查詢!

+1

'UserName = mathew'這是一個字符串,而不是一個整數。 –

+0

你是對的..糾正相同.. –

0

您可以通過兩步完成。首先獲取用戶的ID:

SELECT DBID 
FROM Users 
WHERE UserActive=1 AND UserName='mathew'; 

現在,你有用戶的ID,你可以用第二個查詢將其插入到Inventory表:

INSERT INTO Inventory (ProductID,PurchasedByUser,OtherAttributes) 
VALUES(23,<THE-USER'S-ID>, 'Yellow'); 

我假設你知道如何做到這一點在PHP,因爲你不是要求PHP代碼

0

我相信23 & Yellow有記錄,你需要一個mathewquote

INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes) 
    SELECT 23, U.DBID, Yellow 
    FROM Inventory U INNER JOIN Users ud 
    ON U.DBID = ud.DBID AND ud.UserActive = 1 AND UserName = mathew 

爲了這

INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes) 
SELECT ProductID, PurchasedByUser , OtherAttributes 
FROM Inventory U INNER JOIN Users ud 
ON U.DBID = ud.DBID AND ud.UserActive = 1 AND UserName = 'mathew' 
1

在查詢U.DBID是錯誤的,因爲U是庫存的別名,所以請更換,並把ud.DBID和您的查詢就會決心。

INSERT INTO Inventory (ProductID, PurchasedByUser, OtherAttributes) 
SELECT 23, ud.DBID, Yellow 
FROM Inventory U INNER JOIN Users ud 
ON U.PurchasedByUser = ud.DBID AND ud.UserActive = 1 AND ud.UserName = 'mathew' 
+0

'UserName = mathew'這是一個字符串,而不是一個整數。 –

+0

是的,我們必須寫'ud.UserName ='mathew',因爲'mathew'是字符串,'UserName'是字符串類型列。 – AKS