Update with inner join [duplicate] - sql

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

Related

BigQuery Left Join Support [duplicate]

This question already has an answer here:
SQL - Unequal left join BigQuery
(1 answer)
Closed 4 years ago.
I want to have a left join in bigquery.
SELECT id,mtr,name FROM (SELECT userid,mtr,name FROM
results_20180612_230337
LEFT JOIN table1 ON id=myid where
partitiondate=CAST("2018-05-29" AS DATE)) LEFT JOIN `table2` t2
ON
(CASE
WHEN(SUBSTR(name,1,6)='000000') THEN mtr = CAST(bccbnc AS STRING)
WHEN(CHAR_LENGTH(CAST(bccbnc AS STRING))>5) THEN SUBSTR(name,1,6) =
CAST(bccbnc AS STRING)
ELSE SUBSTR(name,1,5) = CAST(bccbnc AS STRING)
END)
I am getting error
Error: LEFT OUTER JOIN cannot be used without a condition that is an equality of fields from both sides of the join.
It works if I remove CASE.
BigQuery, unlike MySQL is not very good at joining on complex relationships.
I suggest you create an intermediary/temporary (see here) table where you can then join on a equality (even a view works for those matters)
You can create a column that uses that case statement:
CASE
WHEN(SUBSTR(name,1,6)='000000') THEN mtr
WHEN(CHAR_LENGTH(CAST(bccbnc AS STRING))>5) THEN SUBSTR(name,1,6)
ELSE SUBSTR(name,1,5) end as column_to_join_onbccbnc
And then on join on it

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.

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

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

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.