2012-08-06 2 views
0

나는 이것이 내가 찾을 수있는 것 같지만 정확한 용어를 모른다.Crossing MySQL Tables

몇 가지 테이블이있는 SQL 데이터베이스가 있습니다. 하나의 테이블은 소프트 폰 (agent_log)에 대한 발신자 로그를 저장하며, 하나의 테이블에는 소프트 폰에있는 사람들이 호출하는 캠페인 정보가 저장됩니다 (캠페인). 두 테이블 모두 서로에게 전화를 걸 수있는 "campaign_id"열을 가지고 있습니다 (제 생각에는). 나는 분명히 '활성'열이 해당 테이블에 존재하지 않기 때문에 그것의 존재, 작동하지 않습니다

SELECT * FROM agent_log WHERE active = 'Y'; 

과 같을 것이다 SQL 쿼리를 가질 수 있도록 나는이 두 테이블을 관련 필요 캠페인 표. 이 문제를 해결할 수있는 간단한 방법이 있습니까?

+0

http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html –

+0

초보자를위한 항상 좋은 리소스, 나 결코 실패하지 :) http : //www.w3schools.com/sql/default.asp – Hawili

+0

이것이 실제 DB이고 아직 이와 같은 작업을 수행 할 수있는 지식이 없다면 잠시 중단하십시오. 테이블을 잠그고 잠재적으로 다른 사용자에게 영향을주는 학습을 할 때 잘못된 쿼리를 작성하는 것은 매우 쉽습니다. 자신과 조직에 호의적 인 태도를 취하고 자습서를 실행하십시오. 정기적으로이 작업을 수행하려는 경우 SQL 교육을 강요하십시오. 실험중인 경우 개발 서버에서 수행하십시오. 조인이 올바르게 작성되지 않았기 때문에 단일 구문이 30 분 넘게 라이브 애플리케이션을 죽이는 것을 보았습니다. – invertedSpear

답변

1

아이디 CAMPAIGN_ID 두 테이블에 존재 가입없이 작동되며 참가 테이블 사이의 관계가 있음을 가정한다 :

SELECT agent_log.campaign_id 
FROM agent_log, campaigns 
WHERE agent_log.campaign_id = campaigns.campaign_id 
     AND campaigns.active = 'Y' 

당신이 가입 사용하려는 경우가 나는 당신이 그것을 배우는 당신의 시간의 일부를 보내는 것이 좋습니다.

3

당신이하려고하는 것은 JOIN입니다. JOIN은 테이블 사이에 공통된 필드를 사용하기 때문에 테이블의 경우 campaign_id이됩니다.

SELECT * 
FROM agent_log al 
INNER JOIN campaigns c 
    ON al.campaign_id = c.campaign_id 
WHERE c.active = 'Y' 

또는

SELECT * 
FROM agent_log al 
INNER JOIN campaigns c 
    ON al.campaign_id = c.campaign_id 
    AND c.active = 'Y' 

나는 당신이 어떤 약 JOIN의 읽기 않는 것이 좋습니다. The Visual Explanation of Joins가 좋은 시작입니다.

1
SELECT * 
FROM agent_log 
INNER JOIN campaigns ON agent_log.campaign_id = campaigns.campaign_id 
WHERE campaigns.active = 'Y'; 
0

당신은 단순히 당신은 쿼리를 만들 수있는 캠페인 테이블에 두 테이블과 활성 필드에 CAMPAIGN_ID 필드에 색인을 확인해야이

SELECT al.* 
FROM agent_log as al 
INNER JOIN campaigns as c 
ON al.campaign_id = c.campaign_id 
WHERE c.active = 'Y'; 

같은 쿼리를 가입 사용해야 효율적으로 운영하십시오.

0

이 내부가

SELECT 
    agent_log.campaign_id 
FROM 
    agent_log, 
    campaigns 
WHERE 
    agent_log.campaign_id = campaigns.campaign_id 
AND 
    campaigns.active = 'Y';