【问题标题】:SQL Joining 2 similar tablesSQL Joining 2个相似的表
【发布时间】:2009-09-01 09:42:30
【问题描述】:

我有两个表用于存储不同类型事件的详细信息。 这些表几乎相同,具有日期、持续时间等字段。我正在尝试对两个表执行连接并按相互字段“日期”对它们进行排序。

我知道将“类型”字段简单地添加到单个表并将其全部存储在一个位置会更简单,不幸的是我使用的 cms 的性质不允许这样做。

有没有办法简单地执行此操作?以下查询不返回任何结果。

$sql = "SELECT * FROM Events_One a, Events_Two b WHERE a.Date > now() OR b.Date > now() ORDER BY Date ASC LIMIT ".$limit;

【问题讨论】:

    标签: php sql join


    【解决方案1】:

    您应该查看UNION 声明。它完全满足您的需求。

    SELECT columns FROM t1
    UNION
    SELECT columns FROM t2
    

    为您提供一组,稍后您可以根据需要对其进行过滤或排序。

    【讨论】:

      【解决方案2】:

      如果您对每种事件类型都有一个表,并且每个事件类型都有相同 字段,我会说您应该重新考虑您的设计。这违反了规范化规则。这是一个糟糕的设计,因为每次新事件出现时它都会强制您添加另一个表。如果您可以通过向现有表添加数据(例如新类型值)来添加新事件,那就更好了。

      【讨论】:

      • 他明确表示,在他的问题中,这个解决方案是不允许的。
      • 是的,不幸的是,这不是我的设计;)
      【解决方案3】:

      如果你想加入两个相似的表你可以使用Union或union all

      联合:它就像一个连接命令。使用联合时,所有选定的列都需要具有相同的数据类型。只选择不同的值。

      Union All :它几乎就像 union。没有不同的操作,因此它将获取所有值。

      select  * FROM Events_One a   WHERE a.Date > now() 
      union 
      select  * FROM Events_Two b   WHERE b.Date > now()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-13
        • 2016-02-09
        • 1970-01-01
        • 2021-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多