insert into select query-multipart identifier could not be bound - sql

this query returns multipart identifier could not be bound for
table2.AId and table1.LId = table2.LId
the query is
insert into table1(col1)
select col2 from table2
where table1.AId = table2.AId and table1.LId = table2.LId;
your help is highly appreciated

You need to include all tables in the SELECT in the FROM clause. So, this is syntactically correct:
insert into table1(col1)
select t2.col2
from table2 t2 join
table1 t1
on t1.AId = t2.AId and t1.LId = t2.LId;
However, you probably intend UPDATE:
update t1
set col1 = t2.col2
from table1 t1 join
table2 t2
on t1.AId = t2.AId and t1.LId = t2.LId;
This modifies the rows in t1. The version with insert will insert new rows with new values only in one column.

Your select query does not "know" the table in the insert into part, so you should use a join:
insert into table1(col1)
select col2
from table2
inner join table1 on table1.AId = table2.AId and table1.LId = table2.LId;
However, I suspect you are looking for update rather then insert:
update t1
set col1 = t2.col2
from table1 t1
inner join table2 t2 on t1.AId = t2.AId and t1.LId = t2.LId;

Missing join condition
insert into table1(col1)
select t2.col2
from table2 t2 join
table1 t1
on t1.AId = t2.AId and t1.LId = t2.LId;

Related

How to update multiple columns in the oracle SQL on ATP fusion DB

I am trying to use the below query, its everytime saying cannot insert null for the second column.
UPDATE TABLE1
SET (COL1,COL2,COL3) = (SELECT COL1,COL2,COL3
FROM TABLE2
WHERE t1.id = t2.id);
Try this:
UPDATE TABLE1 SET (COL1,COL2,COL3) =
(SELECT COL1,NVL(COL2,0),COL3 FROM TABLE1 T1, TABLE2 T2 where t1.id = t2.id)
WHERE <YOUR WHERE CONDITION>
I would use a MERGE:
MERGE INTO TABLE1 t1
USING (SELECT id, COL1,COL2,COL3
FROM TABLE2) t2
ON (t1.id = t2.id)
WHEN MATCHED THEN UPDATE SET t1.COL1 = t2.COL1
, t1.COL2 = t2.COL2
, t1.COL3 = t2.COL3;
There are rows in table1 where not corresponding row exists in table2 thus the sub-query returns nothing which means the UPDATE statement will take that as null for all three columns.
You have to add a WHERE clause that only updates rows in table1 that do have a matching row in table2
UPDATE TABLE1
SET (COL1,COL2,COL3) = (SELECT COL1,COL2,COL3
FROM TABLE2 t2
WHERE table1.id = t2.id)
where exist (select *
from table2 t2
where table1.id = t2.id);

How to add a column in a table from another table having common id column in both the tables in SQL Server?

I am trying to update a table1 with a Column2 from table2 where id should match while inserting the Column2 values from table2 in table1 for SQL Server.
I tried with the below 2 sets of code, but it is not working.
Can anyone help me out with this?
alter table table1
add Column2 varchar(20)
insert into table1
Select t2.Column2
from table1 as t1
inner join table2 as t2
on t1.id = t2.id
And, below also:
Update table1
Set Column2 = (Select t2.Column2
from table1 as t1
inner join table2 as t2
on t1.id = t2.id)
Update t1
Set Column2 = t2.Column2
from table1 as t1
inner join table2 as t2
on t1.id = t2.id

How to Update column values of t1 from Table t2?

I want to select t2 column values (Name) and update with t1 column values (Name) without where clause. what will be the query?
I am executing below code:
update t1 set t1.name=t2.name from t2 where t1.id=t2.id
but I want to perform it without WHERE clause.
Join both tables on id:
UPDATE t1 SET t1.Name = t2.Name
FROM TableName1 t1
INNER JOIN TableName2 t2 ON t1.Id = t2.Id
We use MERGE nowadays:
MERGE t1 USING t2 ON t1.id = t2.id
WHEN MATCHED THEN
UPDATE SET name = t2.name;
just do it
UPDATE t1
SET t1.name=t2.name
FROM table1 t1 INNER JOIN table2 t2 ON t1.id=t2.id

Using an inner join with subqueries in an update syntax

I am trying to use a inner join with an update statement with a subquery ... can you help me out with the sytax please --- and also how do you use the AS clause for alias in sql server???
the following is what i am trying to do :
Update Table1
inner join table2
set table1.value1 = (select table2.value1 where table1.value 1 ....)
any idea??
If you need to use a subquery to perform the UPDATE you can do it this way:
UPDATE t1
SET t1.value = t2.value
FROM Table1 t1
JOIN
(
SELECT id, value
FROM table2
) t2
ON t1.id = t2.id
One way is to alias the table:
update t1
set table1.value1 = t2.value1
from table1 as t1
join table2 as t2
on t1.id = t2.t1_id
You should try
UPDATE table1 SET t1.value1 = t2.value2
FROM table1 t1
INNER JOIN table2 t2
ON t1.field1 = t2.field2
UPDATE Table1 t1
INNER JOIN (
SELECT id, value
FROM table2
) t2 USING(id)
SET t1.value = t2.value

How to replace IN () with Conditional inner join?

Table1 (ID, Col1, col2, col3, col4)
Table2 (ID, Col5, col6)
-----------------SP-------------------
set #Ids = '1,2,3,4,5,6,7,8,9' // Input paremeter (can be NULL)
Create Table #Tabel2
(
Id int
)
Insert into #table2 select * from dbo.Split(#Ids, ',')
NOW #table2 has: 1 2 3 4 5 6 7 8 9
Scenario
Select t1.Col1,t1.col2,t1.col3
FROM Table1 as t1
INNER JOIN Table2 as t2 ON t1.Col1=t2.Col2
AND (#Ids is null OR t1.ID in (Select Id from #Table2))
Question
How to replace IN with conditional inner join?
Because you used alias t which was never defined in your query, it is not clear to me which table ID should be joined on. I took a guess and used t1.
Select t1.Col1,t1.col2,t1.col3
FROM Table1 as t1
INNER JOIN Table2 as t2 ON t1.Col1=t2.Col2
left outer join #Table2 ids on #Ids is null or t1.ID = ids.ID --maybe this should be t2.ID = ids.ID?
Unless I'm misunderstanding (it is friday afternoon after all) you want all rows from Table1/Table2, matched to #Table2 where possible, but everything if #Table2 is empty - this is simply an outer join.
SELECT t.Col1,
t.col2,
t.col3
FROM Table1 AS t1
INNER JOIN Table2 AS t2
ON t1.Col1 = t2.Col2
LEFT OUTER JOIN #Table2 t3
ON t2.ID = t3.ID
In SQL Server 2008, you can use CASE statements in your join clause, for example:
SELECT *
FROM table1
INNER JOIN table2 ON CASE WHEN table1.column1 = 'this' THEN null ELSE 'that' END = table2.column1