【问题标题】:Finding matching records from two tables MySQL从 MySQL 的两个表中查找匹配的记录
【发布时间】:2014-05-21 11:38:11
【问题描述】:

我有两个表 book1 和 book2。我在两个表中都有issue_datecolumn。我想从两个表中获取记录以匹配发行日期。

book1 和 book2 有以下列-

book_id | user_id | numofbooks | issue_date

我尝试了下面给出的这个 SQL 查询,但不起作用 -

SELECT * FROM `book1`, `book2` WHERE issue_date between '2014-04-06' and '2014-05-07';

引发错误。是否可以通过 SQL 方式执行,或者我应该分别查询两个表并合并结果集?

【问题讨论】:

  • 您应该使用示例数据和您想要的结果来编辑您的问题。
  • 为什么会有2个表的数据类型相同?你应该规范化表格

标签: php mysql sql


【解决方案1】:

我怀疑您是否真的想要两个表中所有匹配记录的笛卡尔积。

我想你想要这样的东西:

SELECT *
FROM book1
WHERE issue_date between '2014-04-06' and '2014-05-07'
UNION ALL
SELECT *
FROM book2
WHERE issue_date between '2014-04-06' and '2014-05-07';

这假定这两个表具有以相同顺序定义的完全相同的列(这反过来又表明数据库设计不佳)。在实践中,您可以将 * 替换为您真正想要的列。

【讨论】:

    【解决方案2】:

    使用UNION ALL:

    SELECT * FROM book1
    WHERE issue_date between '2014-04-06' and '2014-05-07'
    UNION ALL
    SELECT * FROM book2
    WHERE issue_date between '2014-04-06' and '2014-05-07';
    

    这仅在 book1 和 book2 具有相同顺序的相同列时才有效,在这种情况下,为什么不首先将其设计为 1 个表是值得怀疑的。

    如果列不完全匹配,您可以将* 替换为相关的列名。

    【讨论】:

      【解决方案3】:

      您可以如上所述应用联合所有功能,但您应该在两个表 book1 和 book2 中具有字段的相同名称

      【讨论】:

        猜你喜欢
        • 2015-01-19
        • 2012-01-30
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多