2012-04-26 3 views
0

이 질문을 한 문장으로 요약하는 것은 어렵습니다. 두 테이블이 있습니다. 그 중 하나는 외부 피드에 의해 자동으로 정기적으로 업데이트됩니다. 두 번째 테이블에는 고유 키로 식별되는 두 번째 테이블의 일부 행에 대한 추가 정보가 있습니다. 다음은 그 예입니다.SELECT에서 두 테이블을 하나로 축소해야합니까?

 
Table1 
    id: int PRIMARY KEY 
    channel: varchar(255) UNIQUE KEY 
    name: varchar(255) NOT NULL 
    verified: tinyint(1) NOT NULL 

Table2 
    id: int PRIMARY KEY 
    channel: varchar(255) UNIQUE KEY 
    extra_info: varchar(255) 

표 1은 기본 테이블입니다. 이것은 실제로 선택되는 테이블입니다. table2에있는 필드 (ID 및 채널 제외)를 선택하면 Table1에있는 Table2의 모든 행이 선택시 병합되는 것처럼 Table1로 이동해야합니다.

예를 들어, 나는이 두 테이블의 정보가 내가 진행하는 가장 빠른 방법이 무엇인지 궁금하네요이

[{ 
    "id": 5, 
    "channel": "bkids2", 
    "name": "Bkid", 
    "verified": true, 
    "extra_info": "Some extra information added using Table2" 
}, 
... 
] 

같은 JSON 출력으로 끝내고 싶다. SQL 문을 사용하여을 신속하게 할 수 있습니까? 몇 가지 유형의 쿼리가 매우 느린 것을 알고 있으므로 두 테이블의 모든 데이터를 가져 와서 서버 측 프로그래밍 언어를 사용하여 병합을 수행하는 것이 더 빠를 것입니다.

전자가 정답이라고 가정 할 때 나는 절반 방법입니다.이 경우 MySQL을 사용하여 어떻게합니까? 서브 쿼리? 조인? 노동 조합?

나는이 기술들이 어떻게 작동하는지, 얼마나 빨리/느리게 작동하는지 완전히 이해하지 못함을 인정한다. 올바른 방향으로 나를 지적 할 수있는 사람 덕분이다.

답변

1

이 시도 :

SELECT Table1.*, IFNULL(Table2.extra_info, 'DefaultValue') as extra_info 
FROM Table1 LEFT OUTER JOIN Table2 
ON Table1.id = Table2.id 
+0

이것은 거의 완벽하게 작동하지만 행을 찾을 수없는 경우 table2의 열을 기본값으로 설정하는 방법은 무엇입니까? 예를 들어 table2에 일치하는 행이 없기 때문에'extra_info' 열을 테이블에 채울 수 없다면 문자열 "{}"또는 숫자 등으로 설정해야합니까? – Hubro

+0

나는 IFNULL (Table2.extra_info, 'DefaultValue')를 extra_info로 추가하여 나의 대답을 편집했다. –

+0

우수, 감사합니다 – Hubro

0

당신은 원하는 출력을 얻을 수있는 쿼리를 작성할 수 있습니다.

SELECT id, channel, name, verified, extra_info FROM table_1 NATURAL JOIN table_2 

이 쿼리는 테이블을 조인하고 두 결과를 공통으로 표시합니다. 이 질문에 대한 답변을 희망합니다 ....

+0

@ codemonkey : 이건 대답이든 아니든 .... 깨어 있습니다. – Addicted

+0

나는 깨어 있습니다. 나는이 질문을 한 후에 일하러 떠났다. 나는 집에 도착했을 때 분명히 당신의 제안을 시도 할 것입니다 :-)이 해결책을 @ aziz-shaikh의 대답과 다른 점을 설명해 주시겠습니까? 찬성/반대? – Hubro

+0

그는 하나의 열을 기반으로 두 개의 테이블을 합치는 것을 볼 수 있습니다. 각각 과 두 테이블의 전체 일치를 기준으로 결과를 표시하고 있습니다 (비정규와 비슷합니다) – Addicted

관련 문제