여러 테이블에서 SQL INSERT INTO
이것은 제 1번 테이블입니다.
NAME AGE SEX CITY ID
Clara 22 f New York 1
Bob 33 m Washington 2
Sam 25 m Boston 3
이것은 제 2번 테이블입니다.
NUMBER ID
555-1111 1
555-2222 2
555-3333 3
그리고 이제 모든 정보를 보여주는 표 3을 원합니다.
NAME AGE SEX CITY ID NUMBER
Clara 22 f New York 1 555-1111
Bob 33 m Washington 2 555-2222
Sam 25 m Boston 3 555-3333
먼저 표 3에 표 1의 값만 삽입하고, 표 2의 값을 표 3에 Id = Id의 내부 조인으로 삽입했습니다.
INSERT INTO table3 { name, age, sex, city, id}
SELECT name, age, sex, city, id
FROM table 1
INSERT INTO table3 { name, age, sex, city, id, number}
SELECT name, age, sex, city, id, number
FROM table 2 p
INNER JOIN table 3 c ON c.Id = p.Id
하지만 제가 얻는 것은 제 가치관의 복제뿐입니다.3개의 항목이 있는 대신, 저는 9개의 항목을 가지고 있는데, 어떤 항목은 숫자가 null이고, 어떤 항목은 숫자만 있고 나머지 항목은 null이고, 어떤 항목은 정확합니다.
누군가 나를 도와주길 바랍니다.
편집
지금 이와 같은 세 번째 테이블을 사용하고 있는 경우:
NATIONALITY ID
Canadian 1
American 2
French 3
세 개의 테이블을 모두 하나의 테이블로 병합하려면 어떻게 해야 합니까?
하나의 INSERT만 있으면 됩니다.
INSERT INTO destinationTable( name, age, sex, city, id, number, nationality)
SELECT name, age, sex, city, s1.id, number, s3.nationality
FROM sourceTable1 s1
INNER JOIN sourceTable2 s2 ON s2.Id = s1.Id
INNER JOIN sourceTable3 s3 ON s3.Id = s1.Id
새 테이블을 만드는 대신 두 테이블을 결합한 보기를 사용하는 것이 좋습니다. 이렇게 하면 테이블 1 또는 테이블 2의 데이터가 변경되더라도 세 번째 테이블을 업데이트할 필요가 없습니다.
CREATE VIEW dbo.YourView
AS
SELECT t1.Name, t1.Age, t1.Sex, t1.City, t1.ID, t2.Number
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.ID = t2.ID;
레코드를 다른 테이블이 아닌 한 테이블에 저장할 수 있는 경우 전체 조인을 사용해야 합니다.
CREATE VIEW dbo.YourView
AS
SELECT t1.Name, t1.Age, t1.Sex, t1.City, ID = ISNULL(t1.ID, t2.ID), t2.Number
FROM Table1 t1
FULL JOIN Table2 t2
ON t1.ID = t2.ID;
모든 레코드가 표 1에 있고 일부 레코드만 표 2에 있다는 것을 알고 있다면, 다음을 사용해야 합니다.LEFT JOIN
:
CREATE VIEW dbo.YourView
AS
SELECT t1.Name, t1.Age, t1.Sex, t1.City, t1.ID, t2.Number
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID;
모든 레코드가 표 2에 있고 일부 레코드만 표 2에 있다는 것을 알고 있다면 다음을 사용할 수 있습니다.RIGHT JOIN
CREATE VIEW dbo.YourView
AS
SELECT t1.Name, t1.Age, t1.Sex, t1.City, t2.ID, t2.Number
FROM Table1 t1
RIGHT JOIN Table2 t2
ON t1.ID = t2.ID;
또는 표의 순서를 반대로 하고 왼쪽 조인을 사용합니다(오른쪽 조인보다 논리적이지만 개인적인 선호 사항입니다).
CREATE VIEW dbo.YourView
AS
SELECT t1.Name, t1.Age, t1.Sex, t1.City, t2.ID, t2.Number
FROM Table2 t2
LEFT JOIN Table1 t1
ON t1.ID = t2.ID;
시도:
INSERT INTO table3(NAME,AGE,SEX,CITY,ID,NUMBER)
SELECT t1.name,t1.age, t1.sex,t1.city,t1.id,t2.number
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
LEFT JOIN을 사용하면 표 1의 모든 레코드가 표 3에 삽입되고, 표 2의 조인 조건과 일치하는 레코드의 경우 번호도 삽입됩니다.
다음은 D Stanley의 답변에 대한 3개 이상의 테이블에 대한 짧은 확장입니다.
INSERT INTO other_table (name, age, sex, city, id, number, nationality)
SELECT name, age, sex, city, p.id, number, n.nationality
FROM table_1 p
INNER JOIN table_2 a ON a.id = p.id
INNER JOIN table_3 b ON b.id = p.id
...
INNER JOIN table_n x ON x.id = p.id
제가 올바르게 이해하고 있다면, 표 1과 표 2를 함께 연결하여 하나의 쿼리로 이 작업을 수행할 수 있을 것입니다.
INSERT INTO table3 { name, age, sex, city, id, number}
SELECT p.name, p.age, p.sex, p.city, p.id, c.number
FROM table1 p
INNER JOIN table2 c ON c.Id = p.Id
두 테이블의 값을 미리 정의된 방식으로 표시하려면 VIEW를 사용합니다.
http://www.w3schools.com/sql/sql_view.asp
다음은 여러 테이블에 공통 ID가 없는 경우 사용자가 직접 생성할 수 있는 예제입니다.1 as commonId
내부에서 참여할 수 있도록 공통 ID를 생성합니다.
Insert Into #TempResult
select CountA, CountB, CountC from
(
select Count(A_Id) as CountA, 1 as commonId from tableA
where ....
and ...
and ...
) as tempA
inner join
(
select Count(B_Id) as CountB, 1 as commonId from tableB
where ...
and ...
and ...
) as tempB
on tempA.commonId = tempB.commonId
inner join
(
select Count(C_ID) as CountC, 1 as commonId from tableC
where ...
and ...
) as tempC
on tmepB.commonId = tempC.commonId
--view insert result
select * from #TempResult
언급URL : https://stackoverflow.com/questions/20404682/sql-insert-into-from-multiple-tables
'it-source' 카테고리의 다른 글
뷰 열에 인덱스를 만들 수 있습니까? (0) | 2023.07.30 |
---|---|
PHP에서 두 문자열을 알파벳 순으로 비교하는 방법은 무엇입니까? (0) | 2023.07.30 |
Json 객체를 에이잭스에서 스프링 mvc 컨트롤러로 전달하는 방법은 무엇입니까? (0) | 2023.07.30 |
5초마다 jQuery/Ajax로 테이블 새로 고침 (0) | 2023.07.30 |
한 구조체 포인터를 다른 구조체 포인터로 캐스팅 - C (0) | 2023.07.30 |