Hallo allemaal, ik probeer erachter te komen hoe ik een nieuw record kan invoegen met behulp van de volgende vraag:
SELECT user.id, user.name, user.username, user.email,
IF(user.opted_in = 0, 'NO', 'YES') AS optedIn
FROM
user
LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
ORDER BY user.id;
Mijn INSERT
-zoekopdracht tot nu toe is deze:
INSERT INTO user
SELECT *
FROM user
LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id;
Ik weet echter niet zeker hoe ik VALUE('','','','', etc etc)
moet doen bij het gebruik van left en inner joins.
Dus wat ik wil doen is dit:
Tabel
user
:
id | name | username | password | OptIn
--------------------------------------------------------------------
562 Bob Barker bBarker [email protected] 1
En ook de tabel user_permission
user_id | Permission_id
-------------------------
562 4
UPDATE
Dus zoals dit?
INSERT INTO user (name, username, password, email, opted_in) VALUES ('Bbarker','Bbarker','blahblahblah','[email protected]',0);
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(),4);
Antwoord 1, autoriteit 100%
U moet specifiek zijn over de kolommen die u selecteert. Als uw user
-tabel vier kolommen id, name, username, opted_in
had, moet u precies die vier kolommen uit de zoekopdracht selecteren. De syntaxis ziet er als volgt uit:
INSERT INTO user (id, name, username, opted_in)
SELECT id, name, username, opted_in
FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
Er lijkt echter geen reden te zijn om hier tegen user_permission
mee te doen, aangezien geen van de kolommen uit die tabel zou worden ingevoegd in user
. In feite lijkt deze INSERT
onvermijdelijk te mislukken bij schendingen van de uniciteit van de primaire sleutel.
MySQL ondersteunt geen invoegingen in meerdere tabellen tegelijk. U moet ofwel twee INSERT
-instructies in uw code uitvoeren, met de laatste invoeg-ID van de eerste query, of een AFTER INSERT
-trigger maken op de primaire tabel.
INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0);
/* Gets the id of the new row and inserts into the other table */
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4)
Of met een trigger:
CREATE TRIGGER creat_perms AFTER INSERT ON `user`
FOR EACH ROW
BEGIN
INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4)
END
Antwoord 2, autoriteit 32%
u kunt de VALUES
-clausule niet gebruiken bij het invoegen van gegevens met een andere SELECT
-query. zie SYNTAX INVOEREN
INSERT INTO user
(
id, name, username, email, opted_in
)
(
SELECT id, name, username, email, opted_in
FROM user
LEFT JOIN user_permission AS userPerm
ON user.id = userPerm.user_id
);
Antwoord 3, autoriteit 4%
INSERT INTO Test([col1],[col2]) (
SELECT
a.Name AS [col1],
b.sub AS [col2]
FROM IdTable b
INNER JOIN Nametable a ON b.no = a.no
)