2012-07-02 5 views
0

JOIN의 조건으로 COUNT을 사용하는 방식으로 JOINCOUNT과 함께 사용하고 싶습니다.COUNT를 사용하는 SQL JOIN

SELECT * FROM tbl1 
    INNER JOIN (SELECT * FROM tbl2) t2 
    ON (SELECT COUNT(*) FROM tbl1) > 0 

다른 사람에게 알려 주실 수 있습니까?

PS- 내가 가진 진짜 질문은 두 개의 테이블 A와 B가 있으며 생성 날짜가 어느 값보다 큰 A에서 ID를 선택해야한다는 것입니다. 동시에 테이블 B에 테이블 A에 해당 ID가 없는지 확인하려고합니다.이 작업은 정상적으로 작동하지만 테이블 B에 데이터가 없으면 쿼리가 결과를 제공하지 않습니다.

SELECT a.user_id from (SELECT * FROM A WHERE DATEDIFF(event_date,'certain_value') >=another_value) a INNER JOIN B b ON a.user_id != b.user_id 

나는이 같은 수를 사용하려고하지만

SELECT a.user_id from (SELECT * FROM A WHERE DATEDIFF(event_date,'certain_value') >=another_value) a INNER JOIN B b ON count(B.user_id) = 0 OR a.user_id != b.user_id 
+0

'켜짐 (SELECT COUNT (*) FROM tbl1)> 0' – Coffee

+0

관계 란 무엇입니까? tbl1 사이의 COUNT()와 tbl2? –

+0

분명히 가능성은 있지만, 당장은 그다지 이해할 수 없습니다. 부울을 만드는 모든 것을 조인의 조건으로 사용할 수 있습니다. 해결하려고하는 문제를 공유 한 경우 이와 같은 조인이 필요한지 쉽게 알 수 있습니다. – dasblinkenlight

답변

1

쿼리가 ON의 조건이 ON (1=1)에 아무것도 상응하는 일을하지 않습니다 작성 방법 (tbl1에 레코드가 없으면 select * from tbl1 inner join tbl2 on [any condition]은 항상 빈 결과 집합을 반환합니다). 업데이트 된 질문에서

난 당신이 필요하다고 생각 :

SELECT 
    a.user_id 
FROM 
    (SELECT * 
    FROM A 
    WHERE DATEDIFF(A.event_date, 'certain_value') >= another_value) AS a 
WHERE 
    NOT EXISTS (SELECT 1 
       FROM b 
       WHERE b.user_id = a.user_id) 
+0

도움 주셔서 감사합니다. 이제 나는 내가 잘못한 것을 알고있다. – Pradeep

0

이 시도에 실패했습니다

SELECT A.user_id 
FROM A 
WHERE DATEDIFF(A.event_date,'certain_value') >= another_value) 
    AND NOT EXISTS (SELECT B.user_id FROM B Where A.user_id = B.user_id) 
0

"내부 조인 조건에 일치하는 두 테이블에서 하나 개 이상의 행이있는 경우에만 행을 반환 결합한다." http://msdn.microsoft.com/en-us/library/aa213228%28v=SQL.80%29.aspx

내가 제대로 질문을 이해한다면 사용할 수 있지만 :

WHERE a.user_id NOT IN (SELECT user_id FROM B) 

에 대한 당신이 원하는 것입니다 것은 외부 B.에 데이터 참조하지있을 경우에도 당신은 결과를 얻을 수 있도록 가입이다 B에서 어떤 데이터도 선택하지 않기 때문에 테이블에 조인하는 것보다 귀하의 상태가 더 좋음