2014-09-22 3 views
-1

나는이 쿼리를 잠시 고민하고 있으며이 작업을 수행하는 방법을 정확히 모르겠다. "Jarrod의 Deparment가 최소한 1 인 1 인의 리뷰가 최소 2 인 이상인 경우 Jarrod의 급여를 업데이트하십시오."MySQL 단일 쿼리를 여러 테이블에 연결하여 데이터를 검색하는 방법은 무엇입니까?

Table Person { 
    Name: Johnathan; 
    SSN: 1234; 


    Name: Robert; 
    SSN: 1324; 


    Name: Jarrod; 
    SSN: 4231; 

    } 

    Table Overlord { 

    OverlordID: 1234; 
    Salary: 1000; 

    OverlordID: 1324; 
    Salary: 1330; 

    OverlordID: 4231; 
    Salary: 1210; 

    } 

    Table Minion { 

    Name: Shemp; 
    SSN: 1264; 
    Yearly Review: 1.2; 

    Name: Moe; 
    SSN: 1624; 
    Yearly Review: 0.2; 

    Name: Curly; 
    SSN: 4261; 
    Yearly Review: 1.4; 

    } 

Table Dept { 

    DeptName: Evil; 
    Sector: 1A; 
    OverlordID: 1234; 

    DeptName: Good; 
    Sector: 2B; 
    OverlordID: 4231; 

    } 

    Table Payrolls { 

    DeptName: Good; 
    Sector: 2B; 
    MinionID: 1264; 

    DeptName: Good; 
    Sector: 2B; 
    MinionID: 4261; 

    DeptName: Evil; 
    Sector: 1A; 
    MinionID: 1624; 

    } 

나는이 복잡한 데이터베이스 구조되고 있지만,이 같은 구조를 사용하여 사과, 나는 그것을 할 수있을 것입니다 방법을 알아야 : 우리는 다음과 같은 테이블이있는 경우

업데이트 재 러드의 급여 자신의 Deparment는 최소 2 명의 미니언을 보유하고 있으며 연간 리뷰는 1.0을 넘습니다.

+0

실제 대화, 이것이 수업 과제입니까? 그것이 아니라면, 그것은 확실히 하나처럼 보입니다. –

+0

sqlfiddle을 제공하는 것은 어떻습니까? – maszter

답변

2

한 방법과 같이, 서브 쿼리를 사용하는 것입니다

SELECT MinionID FROM Payrolls WHERE DeptName = (
    SELECT DeptName FROM Dept WHERE OverlordID = (
     SELECT SSN FROM Person WHERE Name = "Jarrod" 
    ) 
) 

은 기본적으로 우리가 재 러드라는 사람의 SSN을받을 우리가 사회 보장 번호 (SSN)가 이끄는 부서 이름을 가져, 우리는 작업 부하를 얻을 수 그 이름의 한 부서.

MinionID 
--------- 
1264 
4261 

그런 다음 둥지 다른 쿼리 내에서 위의 쿼리는 미니언 테이블과 MinionID에 가입 할 수 있습니다 :

SELECT * FROM Minion a JOIN (query from above) b ON (a.SSN = b.MinionID) 

또는 당신이에서 사용할 수있는 다음과 같은 데이터를 반환합니다

조건은 다음과 같습니다.

SELECT * FROM Minion WHERE SSN IN (query from above) 

어느 시점에서 다른 쿼리 t 내에 중첩 할 수 있습니다. 오 얼마나 많은 행이 만족 YearlyReview의 수> 1.0를 얻을 :

단일 행 테이블을 리턴
SELECT COUNT(*) FROM (query from above) c WHERE c.YearlyReview > 1.0; 

: 그래서 지금 당신이 둥지

COUNT(*) 
-------- 
2 

당신의 if 문에 내 쿼리 볼 경우 값이었다> 2. 다음

은 당신이 함께 조각을 모두 넣을 때의 모습입니다 =

SELECT COUNT(*) FROM (
    SELECT * FROM Minion WHERE SSN IN (
     SELECT MinionID FROM Payrolls WHERE DeptName = (
      SELECT DeptName FROM Dept WHERE OverlordID = (
       SELECT SSN FROM Person WHERE Name = "Jarrod" 
      ) 
     ) 
    ) 
) c WHERE c.YearlyReview > 1.0; 
관련 문제