[SQL] 어떻게 SQL Server의 가입과 UPDATE 문을 할 수 있습니까?
SQL어떻게 SQL Server의 가입과 UPDATE 문을 할 수 있습니까?
나는 아래를 참조하십시오의 '부모'테이블에서 데이터를 SQL 서버에서이 테이블을 업데이트해야합니다 :
테이블 : 판매
id (int)
udid (int)
assid (int)
테이블 : 밖으로
id (int)
assid (int)
sale.assid는 업데이트 ud.assid에 대한 올바른 값이 포함되어 있습니다.
쿼리는이 무엇을 할 것인가? 내가 가입 생각하고 있지만, 나는 확실히 그것이 가능하다면 아니에요.
해결법
-
==============================
1.SQL DBMS 당신이 사용하고있는 구문은 엄격하게 따라 달라집니다. 다음은 ANSI / ISO (일명 어떤 SQL DBMS에서 작동한다), MySQL은, SQL 서버, 오라클에서 할 수있는 몇 가지 방법입니다. 내 제안 ANSI / ISO 방식은 일반적으로 다른 두 방법보다 훨씬 느립니다 것이 좋습니다,하지만 당신은 SQL을 사용하는 경우 것이 MySQL은, SQL 서버, 또는 Oracle 이외의 DBMS 될 것은, 다음이 갈 수있는 유일한 방법이 될 수있다 (예를 들어, ) 당신의 SQL DBMS는 병합을 지원하지 않는 경우 :
SQL DBMS 당신이 사용하고있는 구문은 엄격하게 따라 달라집니다. 다음은 ANSI / ISO (일명 어떤 SQL DBMS에서 작동한다), MySQL은, SQL 서버, 오라클에서 할 수있는 몇 가지 방법입니다. 내 제안 ANSI / ISO 방식은 일반적으로 다른 두 방법보다 훨씬 느립니다 것이 좋습니다,하지만 당신은 SQL을 사용하는 경우 것이 MySQL은, SQL 서버, 또는 Oracle 이외의 DBMS 될 것은, 다음이 갈 수있는 유일한 방법이 될 수있다 (예를 들어, ) 당신의 SQL DBMS는 병합을 지원하지 않는 경우 :
ANSI / ISO :
update ud set assid = ( select sale.assid from sale where sale.udid = ud.id ) where exists ( select * from sale where sale.udid = ud.id );
MySQL은 :
update ud u inner join sale s on u.id = s.udid set u.assid = s.assid
SQL 서버 :
update u set u.assid = s.assid from ud u inner join sale s on u.id = s.udid
PostgreSQL의 :
update ud set assid = s.assid from sale s where ud.id = s.udid;
목표 테이블이 포스트 그레스에 대한 FROM 절에서 반복되지해야합니다.
신탁:
update (select u.assid as new_assid, s.assid as old_assid from ud u inner join sale s on u.id = s.udid) up set up.new_assid = up.old_assid
SQLite는 :
update ud set assid = ( select sale.assid from sale where sale.udid = ud.id ) where RowID in ( select RowID from ud where sale.udid = ud.id );
-
==============================
2.이 SQL 서버에서 작동합니다 :
이 SQL 서버에서 작동합니다 :
update ud set assid = sale.assid from sale where sale.udid = id
-
==============================
3.포스트 그레스
포스트 그레스
UPDATE table1 SET COLUMN = value FROM table2, table3 WHERE table1.column_id = table2.id AND table1.column_id = table3.id AND table1.COLUMN = value AND table2.COLUMN = value AND table3.COLUMN = value
-
==============================
4.표준 SQL의 접근 방식이 될 것입니다
표준 SQL의 접근 방식이 될 것입니다
UPDATE ud SET assid = (SELECT assid FROM sale s WHERE ud.id=s.id)
SQL 서버에서 당신은 조인을 사용할 수 있습니다
UPDATE ud SET assid = s.assid FROM ud u JOIN sale s ON u.id=s.id
-
==============================
5.PostgreSQL의 :
PostgreSQL의 :
CREATE TABLE ud (id integer, assid integer); CREATE TABLE sales (id integer, udid integer, assid integer); UPDATE ud SET assid = sales.assid FROM sales WHERE sales.id = ud.id;
-
==============================
6.가입 - 보내고 여러 테이블을 사용하여 단순화 업데이트 쿼리.
가입 - 보내고 여러 테이블을 사용하여 단순화 업데이트 쿼리.
UPDATE first_table ft JOIN second_table st ON st.some_id = ft.some_id JOIN third_table tt ON tt.some_id = st.some_id ..... SET ft.some_column = some_value WHERE ft.some_column = 123456 AND st.some_column = 123456
주 - 123456 같은 first_table second_table, third_table 및 some_column 데모 테이블 이름, 열 이름과 ID입니다. 유효한 이름을 바꿉니다.
-
==============================
7.또 다른 예는 왜 SQL 정말 이식 할 수 없습니다.
또 다른 예는 왜 SQL 정말 이식 할 수 없습니다.
MySQL의 것이 될 것이다 :
update ud, sale set ud.assid = sale.assid where sale.udid = ud.id;
더 많은 정보를 위해 여러 테이블 업데이트를 읽기 : http://dev.mysql.com/doc/refman/5.0/en/update.html
UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition]
-
==============================
8.테라 데이타 애 스터는 어떻게 목표를 달성하는 또 다른 흥미로운 방법을 제공합니다 :
테라 데이타 애 스터는 어떻게 목표를 달성하는 또 다른 흥미로운 방법을 제공합니다 :
MERGE INTO ud --what trable should be updated USING sale -- from what table/relation update info should be taken ON ud.id = sale.udid --join condition WHEN MATCHED THEN UPDATE SET ud.assid = sale.assid; -- how to update
-
==============================
9.그들은 모두 T-SQL하지만 불행히도 이후 나는베이스를 위해 일하는 것이 최고 포스트에서 SQL-서버 하나를 생각했다.
그들은 모두 T-SQL하지만 불행히도 이후 나는베이스를 위해 일하는 것이 최고 포스트에서 SQL-서버 하나를 생각했다.
Sybase의 경우 나는 업데이트가 테이블 자체가 아니라 별칭에 있어야 발견 :
update ud set u.assid = s.assid from ud u inner join sale s on u.id = s.udid
-
==============================
10.FROM 키워드 다음 문은 가입으로 여러 행을 업데이트하는 데 사용됩니다
FROM 키워드 다음 문은 가입으로 여러 행을 업데이트하는 데 사용됩니다
UPDATE users set users.DivisionId=divisions.DivisionId from divisions join users on divisions.Name=users.Division
-
==============================
11.당신이 어디에 절을 잊고 ON 표현식에서 모든 조건을 배치하면 당신은 최상의 성능을 얻을 수 있습니다.
당신이 어디에 절을 잊고 ON 표현식에서 모든 조건을 배치하면 당신은 최상의 성능을 얻을 수 있습니다.
나는 그래서 당신은 / 결과를 얻을 수있는 금식 방법 그 다음에 가입하는 데 필요한 UDPATE을 무엇 줄일 수 있다면,이 쿼리는 먼저 테이블을 조인하기 때문에 다음입니다에 where 절을 실행 생각합니다.
당신은 사용자의 테이블을 가지고있다. 그들은 그들의 이름이나 이메일 또는 ACCOUNT_NUMBER를 사용하여 로그인 할 수 있습니다. 이러한 계정은 (1) 활성 또는 (0) 비활성화 할 수 있습니다. 이 테이블은 50000 개 행이
당신은 그들이 모두 완료 뭔가 나쁜했습니다 알 수 있기 때문에 그런 다음 한 가지에 사용하지 않으려면 사용자의 테이블을 가지고있다. 이 테이블은 그러나, 혼합 사용자 이름, 이메일 및 계좌 번호에 하나의 열이 있습니다. 그것은 또한 실행 된 경우 1 (참)로 설정 될 필요가있는 "has_run"표시등이 있습니다
UPDATE users User INNER JOIN blacklist_users BlacklistUser ON ( User.username = BlacklistUser.account_ref OR User.email = BlacklistedUser.account_ref OR User.phone_number = BlacklistUser.account_ref AND User.is_active = 1 AND BlacklistUser.has_run = 0 ) SET User.is_active = 0, BlacklistUser.has_run = 1;
우리는 그것이 본질적으로 가입해야합니다 있는지 확인하기 위해 각 행에 4 번을 확인하고 잠재적으로 더 많은 행을 반환해야합니다 단지 OR 조건에 가입 한 경우. 그들이 합류 모든 조건을 충족하지 않는 경우, 그것은 더 많은 조건을 제공하여 행을 많이 "생략"할 수 있습니다.
그것은 더 읽을 수있다. 모든 조건이 한 장소에있는 업데이트에 대한 행이 한 자리에
-
==============================
12.그리고 MS Access에서 :
그리고 MS Access에서 :
UPDATE ud INNER JOIN sale ON ud.id = sale.udid SET ud.assid = sale.assid;
-
==============================
13.가장 간단한 방법은 SQL 2005에 도입 된 공통 테이블 식 (CTE)를 사용하는 것입니다
가장 간단한 방법은 SQL 2005에 도입 된 공통 테이블 식 (CTE)를 사용하는 것입니다
with cte as (select u.assid col1 ,s.assid col2 from ud u inner join sale s on u.id = s.udid) update cte set col1=col2
-
==============================
14.
UPDATE tblAppraisalBasicData SET tblAppraisalBasicData.ISCbo=1 FROM tblAppraisalBasicData SI INNER JOIN aaa_test RAN ON SI.EmpID = RAN.ID
-
==============================
15.이 하나를 시도,이 뜻은 당신을 위해 작동 생각
이 하나를 시도,이 뜻은 당신을 위해 작동 생각
update ud set ud.assid = sale.assid from ud Inner join sale on ud.id = sale.udid where sale.udid is not null
-
==============================
16.SQLite는 대한 업데이트를 확인하기 위해 ROWID 속성을 사용 :
SQLite는 대한 업데이트를 확인하기 위해 ROWID 속성을 사용 :
update Table set column = 'NewValue' where RowID = (select t1.RowID from Table t1 join Table2 t2 on t1.JoinField = t2.JoinField where t2.SelectValue = 'FooMyBarPlease');
from https://stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 안드로이드 여러 데이터베이스가 열립니다 (0) | 2020.04.13 |
---|---|
[SQL] SQL 데이터베이스 테이블에서 다형성? (0) | 2020.04.13 |
[SQL] 서로 데이터를 하나 개의 테이블을 업데이트 (0) | 2020.04.13 |
[SQL] 기본 키가없는 SQL 테이블에서 삭제 중복 레코드 (0) | 2020.04.13 |
[SQL] MySQL의 업데이트 쿼리의 증가 값 (0) | 2020.04.13 |