2016-05-23 16 views
0

Ich versuche, Daten in eine Inventory-Tabelle einzufügen, indem ich eine UserID aus einer separaten Users-Tabelle abrufe, um eines der Felder zu füllen .;MySQL In Tabelle mit Werten von Inner Join einfügen

Inventory: 
ProductID | PurchasedByUser | OtherAttributes 

und eine Tabelle der Benutzer;

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

Bisher meine SQL wie folgt aussehen:

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' 

Edit: Ich möchte einen einzigen SQL INSERT Antrag stellen können ProductID (INT), PurchasedByUser (Users.DBID) hinzufügen , OtherAttributes (String) in die Inventory-Tabelle, ohne die DBID verfügbar zu machen und nur das Feld UserName zu übergeben.

+2

Warum wollen Sie von 'Inventory' wählen? Und zitieren Sie Ihre statischen Werte wie Gelb und Mathew. –

+1

Was ist 23 und was ist gelb? Und Sie mischen SELECT mit INSERT. Das ist eine völlig ungültige Abfrage – dimlucas

+0

@dimlucas Sie sind nicht richtig => http://dev.mysql.com/doc/refman/5.7/en/insert-select.html – xAqweRx

Antwort

0

CHANGE U.DBID 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

In der von Ihnen eingerahmten SQL-Abfrage beziehen Sie sich auf DBID von U, die die Inventory-Tabelle ist. Von der Struktur, die Sie gemeinsam, ich glaube, Sie die folgende Abfrage wollen:

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' 

ich immer noch verwirrt bin, was hier zu erreichen versuchen, sind Sie holen Werte aus dem Inventar und Einfügen es wieder zurück .. Nicht sicher darüber. Ich versuche nur, Ihnen zu helfen, die Frage herauszufinden!

+1

'UserName = Mathew' das ist eine Zeichenfolge, keine Ganzzahl. –

+0

Sie haben Recht .. das gleiche korrigiert .. –

0

Sie können dies in einem zweistufigen Prozess erreichen. Zuerst sollten Sie die ID des Benutzers:

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

Nun, da Sie die Benutzer ID haben Sie es in die Inventory Tabelle mit einer zweiten Abfrage einfügen können:

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

Ich nehme an, Sie wissen, wie dies zu tun in PHP, weil Sie für PHP-Code sind nicht gefragt

0

ich glaube 23 & Yellow Aufzeichnungen sind und brauchen ein quote für mathew.

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 

Zu diesem

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

Im Query U.DBID falsch ist, weil U alias von Inventar ist so wenden Sie sich bitte und ud.DBID setzen ändern und Ihre Abfrage lösen sein wird.

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' ist eine Zeichenfolge, keine ganze Zahl. –

+0

Ja, wir müssen 'ud.UserName = 'Mathew' schreiben, weil' Mathew' eine Zeichenkette und 'UserName' eine Zeichenkettenspalte ist. – AKS