我希望将sql JOIN
与COUNT
一起使用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
答案 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中选择任何数据而不是在表上加入