Reputation: 1
I do not understand why my query is not working:
INSERT INTO `jos_acymailing_subscriber`(`sleep_breathe`)
VALUE (`1`)
SELECT `subid`
FROM `jos_acymailing_listsub`
WHERE `listid` = `8`
LEFT JOIN `jos_acymailing_subscriber`
ON `jos_acymailing_listsub`.`subid` = `jos_acymailing_subscriber`.`sleep_breathe`
thx
I have a table of users that are subscribed to a mailing lists (the id of the list I am interested in is 8) . The subscription table is a simple intermediary table in a "many to many" relation
In the user table I want to add in a field an integer with 1 for the users that are subscribed to the list 8
So I need to first select the users that are in the intermediary table where the listid is 8 then add 1 in the field sleep_breathe that is in the user table.
The user table structure: name: jos_acymailing_subscriber
Field Type Null Default Comments
subid int(10) No
email varchar(200) No
userid int(10) Yes NULL
name varchar(250) No
created int(10) Yes NULL
confirmed tinyint(4) No 0
enabled tinyint(4) No 1
accept tinyint(4) No 1
ip varchar(100) Yes NULL
html tinyint(4) No 1
key varchar(250) Yes NULL
ersmembershipnumber varchar(250) Yes NULL
first varchar(250) Yes NULL
title varchar(250) Yes NULL
erj varchar(250) Yes NULL
err varchar(250) Yes NULL
monograph varchar(250) Yes NULL
breathe varchar(250) Yes NULL
membershipcategory varchar(250) Yes NULL
mship_status varchar(250) Yes NULL
copd varchar(250) Yes NULL
sleep_breathe varchar(250) Yes NULL
pro varchar(250) Yes NULL
The intermediary table structure is: name: jos_acymailing_listsub
Field Type Null Default Comments
listid smallint(11) No
subid int(11) No
subdate int(11) Yes NULL
unsubdate int(11) Yes NULL
status tinyint(4) No
Upvotes: 0
Views: 2264
Reputation:
There are several errors in that statement.
VALUES
clause is not needed (in fact it's an error).The query to insert values retrieved from a SELECT would be:
INSERT INTO jos_acymailing_subscriber (sleep_breathe)
SELECT 1
FROM jos_acymailing_listsub
LEFT JOIN jos_acymailing_subscriber
ON jos_acymailing_listsub.subid = jos_acymailing_subscriber.sleep_breathe
WHERE listid = 8
One tip: forget the dreaded backticks alltogether so you won't get confused where and for what you need them.
Upvotes: 0
Reputation: 35464
(1) It should be VALUES
not VALUE
in the insert.
(2) The left join
is part of the from
clause. Move the where
clause to the end.
Upvotes: 0
Reputation: 4901
As others have said, that is two queries. Also, VALUES not VALUE. Thirdly, I'm not sure MySQL allows a WHERE before the JOIN. Your queries may have to be
INSERT INTO `jos_acymailing_subscriber`(`sleep_breathe`) VALUES (`1`);
SELECT `subid`
FROM `jos_acymailing_listsub`
LEFT JOIN `jos_acymailing_subscriber`
ON `jos_acymailing_listsub`.`subid` = `jos_acymailing_subscriber`.`sleep_breathe`
WHERE `listid` = `8;
Upvotes: 0
Reputation: 19523
I think the problem is you have put VALUE
instead of VALUES
.
It remains VALUES
even if there is only one value to insert.
Upvotes: 3