How to copy multiple row in table while inserting additional value - mysql

How can i copy table and insert new value at the same time
I want to copy a table with multiple rows and insert a same value "Borrowed" for one column Transaction. I already know how to copy but i dont know how to copy and insert new/another value at the same time.
here is what i got:
INSERT INTO TRANSACTION(UserID,TRANSACTION,First_Name,Last_Name,ISBN,Title,DATE)
VALUES (1,"Borrowed",(SELECT First_Name,Last_Name,ISBN,Title),NOW());

Add your fixed values into the SELECT list:
INSERT INTO TRANSACTION(UserID,TRANSACTION,First_Name,Last_Name,ISBN,Title,DATE)
SELECT 1, "Borrowed", First_Name,Last_Name,ISBN,Title,NOW()
FROM <your table goes here>

Related

Updating column on one table with values from another table

I'm trying to update an empty table notes, with values that come from a column in another table deals:
UPDATE notes
SET notes.content = (
SELECT deals.memo
FROM deals
WHERE deals.id = notes.deal_id
);
this runs with no error but no notes get updated although there are loads of values in memo.
There's no values at all in notes. Can this be the problem?
Perhaps you want to insert rows into notes:
INSERT INTO notes (deal_id, content)
SELECT d.id, d.ememo
FROM deals;
This will add rows into notes with values from the rows in deals.

Insert specific values into mysql database

I have the following problem:
I would't insert all the values in my db.
So, i would insert only id,tessera,nome,sex. I thought i had to write something like this:
INSERT INTO registries(id,tessera,'',nome,sex) VALUES (35983,35983,'DOG', 'FABIO', 'M')
I don't want to insert the DOG value in my db cause I don't have any attribute in my schema to save it.
I have 3000 rows and I take this row as example so I can't simply delete the DOG value and the attribute field in my sql query.
I remember that I have to use something like this
INSERT INTO registries(id,tessera,'',nome,sex)
I mean, I have to write '' to not consider the value in that position.
but MySQL gives me an error..
Can you help me?
You can handle this situation in following ways.
create temporary table on same server. Insert all data in temporary table then use insert into select statement and select required fields.
create temporary column and insert data in that column and delete temporary column
INSERT INTO registries (id,tessera,new_column,nome,sex)
VALUES (35983, 35983, '', 'FABIO', 'M');
Now
DROP COLUMN new_column from registries;
Try this (assuming dog is a column name):
INSERT INTO registries (id,tessera,dog_name,nome,sex) VALUES (35983, 35983, '', 'FABIO', 'M')
If dog_name is allowed to be NULL (which it is by default) you could also just not insert any value, like this:
INSERT INTO registries (id,tessera,nome,sex) VALUES (35983, 35983, 'FABIO', 'M')

MySQL, Synchronise two tables

I have two data base A & B, in each one I have a table called answer, I want to use the 2nd one as an archive table, I want to create a trigger that copies the last inserted row in A.answer to B.answer.
Here what I did
CREATE TRIGGER `a` AFTER INSERT ON `A`.`answer`
FOR EACH ROW INSERT INTO `B`.`answer` SELECT * FROM `answer`
This trigger works, but copy all the answers inserted in A.answer to B.answer.
The problem is : I dont want to copy all answers, but only the last one.
(remark : I dont know the id of the inserted answer, so dont tell me to add a ' WHERE answer.id = xx ').
Thanks for your help
You could write your trigger this way:
CREATE TRIGGER `a` AFTER INSERT ON `A`.`answer`
FOR EACH ROW
INSERT INTO `B`.`answer` VALUES (NEW.col1, NEW.col2, ..., NEW.colN)
where you have to specify all column names.
Please see fiddle here.

Trouble with MAX(col)+1 INSERT into same MySQL table

I need two id columns in the same table that create unique values upon insert. Since MySQL allows only one column to auto-increment, I need to do something like max(id)+1 for the other column.
Here's the SQL I expected to work:
INSERT INTO invoices (invoiceid)
VALUES ((SELECT MAX(invoiceid)+1 FROM invoices))
The select statement works independently, but within my INSERT, it's not allowed. I get the error : You can't specify target table 'invoices' for update in FROM clause
You want to use INSERT INTO .... SELECT FROM instead of INSERT INTO...VALUES():
INSERT INTO invoices (invoiceid)
SELECT MAX(invoiceid)+1
FROM invoices
My question for you would be why are you not use an AUTO INCREMENT field to generate the invoiceid value? That is what it is for, then you will not have to create this when inserting data.

T-SQL how to modify the value before insert

I find that there are only after and instead of triggers in sql server. And it is illegal to modify the values in the inserted pesudo table. Then my problem occurs: If I want to check the data which is going to be inserted into my table, and when the data violates my constraints I should modify these values to default values, how to do it ? How about updateing the values after inserted ? However, if there's no primary key or colum which is unique in my table, how can I locate the row just inserted and then update it ?
Basically, with an INSTEAD OF INSERT trigger, you can achieve what you're looking for - just read out the data from the INSERTED pseudo table, modify it, and insert it into the table
So your trigger would look something like this:
CREATE TRIGGER YourTrigger ON dbo.YourTable
INSTEAD OF INSERT
AS
SET NOCOUNT ON
-- do the INSERT based on the INSERTED pseudo table, modify data as needed
INSERT INTO dbo.YourTable(Col1, Col2, ....., ColN)
SELECT
Col1, 2 * Col2, ....., N * ColN
FROM
INSERTED
Of course, you could also add e.g. checks in the form of WHERE clause to that SELECT .... FROM INSERTED statement to e.g. ignore certain rows - the possibilities are endless!