SQL Update values from one table column to another [duplicate] - sql

This question already has answers here:
Update a table using JOIN in SQL Server?
(13 answers)
Closed 6 years ago.
I have a simple select statement that identifies the rows I want to update. Basically i want to copy the vad_description to the vb_description and can't quite figure this out. Any Help would be appreciated.
SELECT
variant_bom.vb_id
,variant_bom.vb_description
,variant_detail.vad_description
FROM dbo.variant_bom
INNER JOIN dbo.variant_detail
ON variant_bom.vb_vad_id = variant_detail.vad_id
INNER JOIN dbo.variant_setting
ON variant_setting.vas_vad_id = variant_detail.vad_id
WHERE variant_setting.vas_manufactured_variant = 1
AND variant_setting.vas_discontinued_product = 0

Try something like this
UPDATE vb
SET vb.vb_description = vd.vad_description
FROM dbo.variant_bom vb
INNER JOIN dbo.variant_detail vd
ON vb.vb_vad_id = vd.vad_id
INNER JOIN dbo.variant_setting vs
ON vs.vas_vad_id = vd.vad_id
WHERE vs.vas_manufactured_variant = 1
AND vs.vas_discontinued_product = 0
Giving Alias name to tables will make your query more readable

Related

Update on Oracle with join [duplicate]

This question already has answers here:
Update statement with inner join on Oracle
(15 answers)
Closed 5 years ago.
I have the Following Statement and need to create an update.
Select p.POS_NR, p1.VON_POS_NR
FROM table1 p. inner join table2 p1
ON p.Bestell_NR = p1.Vorgangs_NR
and p.Bestell_pos = p1.Vorgangs_pos
where NOT (p.POS_NR = p1.Von_Pos_NR)
Now I want to equal p.POS_NR and p1.Von_POS_NR, but I don't know how to create the update
I hope someone can help me
You can do this using a MERGE statement. I'll assume that TABLE1 has a primary key field named KEY_FIELD - you can substitute as necessary:
MERGE INTO TABLE1 t1
USING (SELECT p.KEY_FIELD, p.POS_NR, p1.VON_POS_NR
FROM TABLE1 p
INNER JOIN TABLE2 p1
ON p.BESTELL_NR = p1.VORGANGS_NR and
p.BESTELL_POS = p1.VORGANGS_POS
WHERE NOT (p.POS_NR = p1.VON_POS_NR) d
ON (d.KEY_FIELD = t1.KEY_FIELD)
WHEN MATCHED THEN
UPDATE
SET t1.POS_NR = d.VON_POS_NR;
Best of luck.

how save a table with help of inner join [duplicate]

This question already has answers here:
How do I create a table based on another table [duplicate]
(2 answers)
Closed 6 years ago.
everyone! I would like to save the table after I used INNER JOIN.
CREATE TABLE result AS (
SELECT measures.Day,
SELECT measures.Day,
stations.Name,
measures.name_measure,
measures_of_stations.Count,
measures.unit
FROM
measures_of_stations
INNER JOIN
stations
ON measures_of_stations.id_station = stations.id_station
INNER JOIN
measures
ON measures_of_stations.id_measure = measures.id_measure)
But I have an error "Invalid syntax next to ( ". Why?
Thank you in advance :)
You need to use the INTO clause, see example below:
SELECT measures.Day,
stations.Name,
measures.name_measure,
measures_of_stations.Count,
measures.unit INTO result
FROM
measures_of_stations
INNER JOIN
stations
ON measures_of_stations.id_station = stations.id_station
INNER JOIN
measures
ON measures_of_stations.id_measure = measures.id_measure
SELECT measures.Day,
stations.Name,
measures.name_measure,
measures_of_stations.Count,
measures.unit
INTO result
FROM
measures_of_stations
INNER JOIN
stations
ON measures_of_stations.id_station = stations.id_station
INNER JOIN
measures
ON measures_of_stations.id_measure = measures.id_measure

From Oracle to Postgres [duplicate]

This question already has answers here:
Oracle "(+)" Operator
(4 answers)
Closed 9 years ago.
We tried to migrate from Oracle to Postgres. We use ora2pg , but we have an error with this code:
SELECT DISTINCT UPU.USUA_C_USUARIO
FROM GN_USUARIOS U,TR_USUARIOS_X_PERFILES_USUARIO UPU,TR_V_PERFILES_USUARIOS PU
WHERE (U.C_USUARIO = UPU.USUA_C_USUARIO(+))
AND (UPU.PEUS_X_PEUS = PU.X_PEUS)
AND U.C_USUARIO = USU.C_USUARIO))
OR NOT EXISTS (
SELECT UPU2.USUA_C_USUARIO
FROM TR_USUARIOS_X_PERFILES_USUARIO UPU2
WHERE UPU2.USUA_C_USUARIO = USU.C_USUARIO)
OR USER = (
SELECT V_CONSTANTE
FROM GN_CONSTANTES
WHERE C_CONSTANTE = 'TRUSUPROP')
We have an error with PU.USUA_C_USUARIO(+). We dont have enough experience in this kind of conversions. How can we transform the code with LEFT OUTER JOIN ?
Thanks!
Probably like so:
FROM GN_USUARIOS U
LEFT JOIN TR_USUARIOS_X_PERFILES_USUARIO UPU ON U.C_USUARIO = UPU.USUA_C_USUARIO
LEFT JOIN TR_V_PERFILES_USUARIOS PU ON UPU.PEUS_X_PEUS = PU.X_PEUS
WHERE U.C_USUARIO = USU.C_USUARIO)
Or possibly:
FROM GN_USUARIOS U
LEFT JOIN ( SELECT UPU.USUA_C_USUARIO, ...
FROM TTR_USUARIOS_X_PERFILES_USUARIO UPU
JOIN TR_V_PERFILES_USUARIOS PU ON UPU.PEUS_X_PEUS = PU.X_PEUS
) UPU_PU ON U.C_USUARIO = UPU_PU.USUA_C_USUARIO
WHERE U.C_USUARIO = USU.C_USUARIO)
In either case, be wary that there's a USU table that is defined nowhere and mismatched parenthesis in your query.

SQL Syntax Error - JOIN [duplicate]

This question already has answers here:
SQL: JOIN syntax error
(2 answers)
Closed 9 years ago.
I am attempting to eliminate unwanted duplicate query results. The gist is that the field [CUSIP] exists in all tables in question, however, the field [4DTYR] exists in all tables except [IDX_FS].
I had previously only joined the tables via the [CUSIP] field, and that resulted in the query produced unwanted duplicate results (some sort of a permutation of [4DTYR] from all the tables that contained that field).
Then, I made the modification below. However, now I'm receiving a JOIN syntax error. Can anyone kindly help? I've reposted just in case this Q got a little bit stale. Thanks!
FROM
(((IDX_FS LEFT JOIN DATA_BS
ON IDX_FS.CUSIP = DATA_BS.CUSIP)
LEFT JOIN DATA_Footnotes
ON IDX_FS.CUSIP = DATA_Footnotes.CUSIP)
LEFT JOIN DATA_IS
ON IDX_FS.CUSIP = DATA_IS.CUSIP)
LEFT JOIN DATA_SP
ON IDX_FS.CUSIP = DATA_SP.CUSIP
AND (((DATA_BS LEFT JOIN DATA_IS
ON DATA_BS.CUSIP = DATA_IS.CUSIP
AND DATA_BS.4DTYR = DATA_IS.4DTYR)
LEFT JOIN DATA_SP
ON DATA_BS.CUSIP = DATA_SP.CUSIP
AND DATA_BS.4DTYR = DATA_SP.4DTYR)
LEFT JOIN DATA_Footnotes.4DTYR
ON DATA_BS.CUSIP = DATA_Footnotes.CUSIP
AND DATA_BS.4DTYR = DATA_Footnotes.4DTYR
Looks like your error is here
LEFT JOIN DATA_Footnotes.4DTYR -- this is not a valid table name
ON DATA_BS.CUSIP = DATA_Footnotes.CUSIP
AND DATA_BS.4DTYR = DATA_Footnotes.4DTYR
removing the .4DTYR should fix your error
LEFT JOIN DATA_Footnotes
ON DATA_BS.CUSIP = DATA_Footnotes.CUSIP
AND DATA_BS.4DTYR = DATA_Footnotes.4DTYR

Update with inner join [duplicate]

This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
Update a table using JOIN in SQL Server?
I am stuck on a very simple query, an update with a join, I want to put the value of the field RECORDTYPE in the RECORDTYPE field = to the value of TEMPLATETABLE.RECORDTYPE
I tried with this but I get continuous syntax errors, which is the problem?
update MAINTABLE MT
set MT.MYTYPE = TT.RECORDTYPE
inner join TEMPLATETABLE TT on TT.ID_RECORD_TEMPLATE = MT.ID_RECORD_TEMPLATE
You are missing the FROM clause. Try this instead:
UPDATE MT
SET MT.MYTYPE = TT.RECORDTYPE
FROM MAINTABLE MT
INNER JOIN TEMPLATETABLE TT
ON TT.ID_RECORD_TEMPLATE = MT.ID_RECORD_TEMPLATE