SQL JOIN使用COUNT

时间:2012-07-02 15:25:40

标签: sql

我希望将sql JOINCOUNT一起使用COUNT作为JOIN的条件。

e.g。

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

3 个答案:

答案 0 :(得分:1)

编写查询的方式,ON中的条件无效且等同于ON (1=1)(如果tbl1中没有记录,select * from tbl1 inner join tbl2 on [any condition]将始终返回空结果集。)< / p>

从您更新的问题我认为您需要:

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)  

答案 1 :(得分: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)

答案 2 :(得分:0)

“仅当两个表中至少有一行与连接条件匹配时,内连接才会返回行。”你想要的是一个OUTER JOIN,这样即使B中没有数据你也能得到结果。见: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中选择任何数据而不是在表上加入