2017-09-06 2 views
0

나는 3 (3) 테이블이 있습니다MYSQL 왼쪽 작동하지 조인

  • vehicle 테이블 : Vehicle table

  • userCarMapping 테이블 : userCarMapping

  • userInfo 테이블 userInfo

나는 차량이 userCarMapping 테이블에서 사용자에 매핑되는 경우 userInfo 테이블에서 vehicle 테이블과 firstnamelast name에서 모든 차량을 싶어.

나는이 쿼리 작성 :

SELECT `vehicle`.`vehicleId`, `vehicle`.`modelId`, `vehicle`.`RegNo`, `userInfo`.`firstName`, `userInfo`.`lastName` 
FROM `vehicle` 
LEFT JOIN `userCarMapping` ON `vehicle`.`vehicleId` = `userCarMapping`.`vehicleId` 
LEFT JOIN `userInfo` ON `userCarMapping`.`userId` = `userInfo`.`userId` 
WHERE `vendorUserId` = '1' AND `vehicle`.`status` = 'approved' AND `userInfo`.`status` = 'approved'` 

을하고 난 vehicle 테이블에서 모든 차량을 원하는대로이 출력을 얻고있다. 당신이 다음은 당신이 userinfo 조건이 아닌 곳의 조인 사용하는 경우 condition.But을 만족하는 행을 반환 where에서 userinfo 테이블 조건을 사용하는 경우

output

+0

[MySQL] (https://dev.mysql.com/doc/refman/5.7/en/) 및 [SQL Server] (https://docs.microsoft.com/en-us/sql/t) -sql/language-reference)은 다른 회사에서 제작 한 다른 소프트웨어 패키지입니다. 둘 다 SQL을 구현하더라도 다양한 방식으로 확장하고 때로는 쿼리가 서로 호환되지 않는 다른 구문 규칙을 사용합니다. 사용중인 소프트웨어와 일치하는 태그 만 사용하십시오. – axiac

+1

'AND userInfo.status = 'approved '' : 왼쪽 결합을 내부 결합으로 변환합니다. 이 조건을 조인 조건으로 이동하십시오. – HoneyBadger

+0

힌트 :'WHERE'를'AND'로 대체하십시오. –

답변

1

, 다음 표는 조건 등을 충족시키는 행 가입 거기에 userinfo 테이블과 기록에 status active과 5 레코드가 있습니다 다음 두 조인이 조인에 대해서만 고려하십시오. 쿼리 아래

시도 :

SELECT `vehicle`.`vehicleId`, `vehicle`.`modelId`, `vehicle`.`RegNo`, `userInfo`.`firstName`, `userInfo`.`lastName` 
FROM `vehicle` 
LEFT JOIN `userCarMapping` ON `vehicle`.`vehicleId` = `userCarMapping`.`vehicleId` 
LEFT JOIN `userInfo` ON `userCarMapping`.`userId` = `userInfo`.`userId` AND `userInfo`.`status` = 'approved'` 
WHERE `vendorUserId` = '1' AND `vehicle`.`status` = 'approved' 

당신이 대답을 이해 바랍니다.

+0

당신의 질의는 작동하지만 왜 내 것이 작동하지 않습니까? 전에 userInfo 조건 만있었습니다. 설명 해주십시오. ??? –

+0

@NilkamalGotarne, 당신이'where' 절에서 그 상태를 볼 때 그 상태가 활성 인 레코드들을 고려할 때. 그리고 제 경우에는 Join에 대한 상태가 활성화 된 레코드 만 고려합니다. –

1

귀하의 문제는 귀하의 질문이 어디에 속하는지 믿습니다.

SELECT 
    vehicle.vehicleId, 
    vehicle.modelId, 
    vehicle.RegNo, 
    userInfo.firstName, 
    userInfo.lastName 
FROM 
    vehicle 
LEFT JOIN userCarMapping ON vehicle.vehicleId=userCarMapping.vehicleId 
LEFT JOIN userInfo ON serCarMapping.userId=userInfo.userId 
WHERE vendorUserId= '1' 
AND vehicle.status= 'approved' 
AND userInfo.status= 'approved' 

기본적으로, 사용자가 여전히 승인 와 사용자 정보 테이블을 찾고 차량에 대한 존재하지 않는 경우. 삭제할 경우

AND userInfo.status= 'approved' 

원하는 정보를 얻을 수 있습니까?

+0

예,'AND userInfo.status = 'approved''가 정상적으로 작동합니다. 당신은 단순히 를 이동할 수 있습니다 및 userInfo.status는 = 왼쪽 '승인' –

+0

하지만 그때 나는 그래서 LEFT 가입 원하는 결과를 얻을 수있는 방법을 사용자 정보 ON serCarMapping.userId = userInfo.userId 및 사용자 정보 가입하세요. 상태 = '승인 됨' 기본적으로이 메시지는 '상태가 승인 된 차량과 사용자에게 사용자 ID를 표시합니다. VS '자동차와 userInfo 상태 = 승인 된 사용자 ID가 어디에 있는지 차량과 사용자에게 알려주십시오. 사용자가 userInfo.status를 좋아하지 않는다면 NULL이되므로 제외됩니다. – Crawdingle

관련 문제