2010-11-19 2 views
0

내 데이터베이스는 2 개의 테이블로 구성됩니다. MySQL을 사용하고 있습니다.sql select를 사용하면 작업이 필요한 자동차를 얻을 수 있습니다.

표 1

차 = ID (INT, 기본 키), 레지 (INT), 타입 (INT)

표 2

작업 = REF (INT, 기본 키), ID (INT), date (date)

지난 3 주 동안 직업을 갖지 못한 자동차를 모두 얻을 수있는 SELECT 문이 필요합니다.

(예 :. 자동차가 최근 3 주 동안 직업을 가지고 있지 않은 경우, 그 차 (ID)를 반환 할 것이다) 나는 그러나 내가 아니라고이 작업을 수행하는 여러 가지 방법이있을 것입니다 알고

SQL에서 아직까지 최대 속도 : <

답변

2

NOT EXISTS에 대한 좋은 사용 사례입니다 :

select c.id,c.reg,c.type 
from cars c 
where not exists 
(
    select NULL 
    from jobs j 
    where j.id = c.id 
    and j.date >= CURRENT_DATE - INTERVAL 3 WEEK 
); 
+0

안녕하세요, 감사합니다. – brux

0

사용중인 Oracle의 특성을 모르지만 오라클에서 작동합니다. 다른 풍미에서는 다른 방식으로 날짜를 계산해야합니다 (조인 구문이 약간 다를 수도 있습니다). 두 테이블 사이의 링크가 jobs.ref 인 경우

select * 
from cars c 
left join jobs j 
    on j.id = c.id 
where j.date < sysdate - 21 
+0

메신저 MySQL 데이터베이스 사용하기 – brux

+0

'sysdate - 21'을 MySQL로 변환하더라도 원하는 데이터를 제공하지는 않습니다. 이렇게하면 3 주 이상 일자리가없는 자동차가 반환되며 3 주 지나지 않은 자동차는 반환되지 않습니다. –

+0

글쎄요, 지난 3 주 동안 직업이 없었던 모든 것을 돌려줍니다. 일자리가 전혀없는 자동차도 포함됩니다. 내가 요청한 것이 아니라. – gnuchu

0

, 다음 SQL은 다음과 같이 될 수있다 :

select id from cars where id in 
    (select ref from jobs where date < DATE_SUB(NOW(),INTERVAl 21 DAY) 
+0

실제로 테이블 사이의 링크 인 경우 id (int) – brux

+0

3 주 전의 직업을 가진 자동차가 반환됩니다. OP가 원하는 것은 ** 지난 3 주 동안 ** 일하지 못한 자동차를 보는 ​​것입니다. –

관련 문제