【问题标题】:SQL JOIN using COUNTSQL JOIN 使用 COUNT
【发布时间】:2012-07-03 16:42:42
【问题描述】:

我想以COUNT 作为JOIN 的条件的方式使用sql JOINCOUNT

例如

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

【问题讨论】:

  • 你能解释一下ON (SELECT COUNT(*) FROM tbl1) > 0发生了什么
  • tbl1 COUNT() 和 tbl2 是什么关系?
  • 我不能马上理解它,尽管这绝对是一种可能性:任何产生布尔值的东西都可以用作连接中的条件。如果您分享了您正在尝试解决的问题,那么您是否确实需要这样的加入会更容易。
  • 你需要一些键来加入表格。您的 ON 语句实际上应该是 WHERE 子句。
  • 试着用英语解释你想要完成的事情,也许用一些示例数据。很难从简短的问题中假设您想要什么类型的查询。您似乎想使用 WHERE 子句而不是连接条件。你熟悉 SQL 吗?

标签: sql


【解决方案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)  

【讨论】:

    【解决方案2】:

    “仅当两个表中至少有一行与连接条件匹配时,内连接才返回行。”你想要的是一个 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 中选择任何数据

    【讨论】:

      【解决方案3】:

      试试这个:

      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)
      

      【讨论】:

        猜你喜欢
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 2012-10-24
        • 1970-01-01
        • 1970-01-01
        • 2021-04-01
        • 2020-07-13
        相关资源
        最近更新 更多