2016-09-23 3 views
0

나는이 개 테이블 I 쿼리를 만든 ID가, 설명, 이름 TEST ID가, 을 작업 ID 작업이 있습니다Sql 2 테이블 Q?

SELECT jobs.id,jobs.name,jobs.country,jobs.description,test.id,test.jobid 
FROM jobs,test 
WHERE jobs.userid='10' 
AND 
GROUP BY jobs.id 

그것은 나에게 모든 작업을 메아리를하지만 한 경우 테스트 ID는 모든 1 에 그것 where jobs.id=test.jobid 결과가 알려져 있습니다. 어떻게 당신이 십자가에 가입했다 있었다 무엇 test.jobid

+2

당신은 직교 조인을하고 있습니다 : 당신은 당신의 ttwo 테이블이 어떻게 조인되어야하는지에 대한 제한이 없기 때문에, mysql은'test'의 모든 레코드에 대해'jobs'의 각 레코드를 합치고 있습니다. 그건 당신이 nx m 결과를 얻는다는 것을 의미합니다. –

답변

0

처럼

.

SELECT jobs.id AS jobs_id,jobs.name,jobs.country,jobs.description,test.id AS test_id,test.jobid AS job_id_from_test 
    FROM jobs 
    LEFT JOIN test ON test.jobid = jobs.id 
    WHERE jobs.userid='10' 

-Might help. 위의 코드는 왼쪽 join 명령을 추가하고 불필요한 'AND'및 'GROUP BY'문을 제거합니다. LEFT JOIN은 정상적인 JOIN과 달리 테스트 테이블에 해당 행이 없더라도 jobs 테이블에 적용 가능한 모든 값을 리턴합니다.

1

이없는 모든 test.jobidjob.id 동일 작업과 작업을 인쇄 할 수 있습니다. 이것은 당신이 원하는 것이 아닙니다. 왼쪽 조인이 필요합니다. 당신이 찾고있는 것은 왼쪽 명령을 조인처럼 소리이

SELECT jobs.id,jobs.name,jobs.country,jobs.description,test.id,test.jobid 
FROM jobs 
left join test on jobs.id = test.jobid 
WHERE jobs.userid='10' 
GROUP BY jobs.id 
+1

GROUP BY 구문에 더 많이 넣는 것이 좋습니다 ... – kbball

+0

@kbball - 이것은 mysql - 게으른 수 있습니다. – Hogan

+1

감사 합니다만 편집 jobs.id = test.jobid – user3026665