0

我想以JOIN一种COUNT使用sqlCOUNT作为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
4

3 回答 3

1

编写查询的方式,条件 inON什么都不做,相当于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)  
于 2012-07-02T15:52:58.957 回答
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)
于 2012-07-02T15:35:46.017 回答
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 中选择任何数据

于 2012-07-02T17:15:31.903 回答