我有两个表book1和book2。我在两个表中都有issue_date
列。我想从两个表中获取记录以匹配发布日期。
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方式执行,还是应该单独查询两个表并合并结果集?
答案 0 :(得分:4)
你的问题对于你真正想做的事情有点模糊。我怀疑你真的想要两张表中所有匹配记录的笛卡尔积。
我想你想要这样的东西:
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';
这假设两个表具有完全相同的列,这些列以相同的顺序定义(反过来,这表明数据库设计不正确)。实际上,您会将*
替换为您真正想要的列。
答案 1 :(得分: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个表格,这是有问题的。
如果列不完全匹配,您可以将*
替换为相关的列名。
答案 2 :(得分:2)
您可以应用上面提到的全部联盟功能,但您应该在表1和表2中都使用字段的相同名称。第二册