【问题标题】:Return records when table is not empty表不为空时返回记录
【发布时间】:2012-08-26 13:17:46
【问题描述】:

我是 SQL 新手,只能执行最基本的 SQL 查询,感谢任何有关此问题的帮助。

MySQL 数据库包含一个 CUSTOMER 表和一个 PURCHASES 表。如果客户进行了购买,那么 PURCHASES 表中将有一个或多个序列号和购买日期。

我想知道如何返回在两个日期之间进行购买的每位客户的客户姓名、序列号和购买日期。

这里是对表格的描述:

购买

  • customer_id
  • 序列号
  • 购买日期

客户

  • customer_id
  • 客户名称
  • 客户地址

【问题讨论】:

  • 您是否注意到您的结构不一致?为什么一张表被称为 CUSTOMER 而第二张表是 PURCHASES?始终使用单数或复数,否则您将很难记住何时使用复数和何时使用单数
  • 嘿。我刚刚注意到我的查询错误正是出于这个原因:-(

标签: mysql sql date between


【解决方案1】:

这里是:

select c.customer_name, p.serial_number, p.purchase
from purchases p, customers c
where p.customer_id = c.customer_id and
p.purchase between '2012-08-27' and '2012-08-31'

SQL Fiddle 在这里,您可以使用它:http://sqlfiddle.com/#!2/e8002/3

【讨论】:

  • 您如何看待隐式连接?我今天早上收到了railed 的消息。
  • 我明白了……只要查询返回正确/预期的结果,对我来说没问题!我一直喜欢用这种方式处理简单的查询。这样一来,它们看起来更简单、更易读。
  • @njk 我认为如果您不打算使用 ANSI-92 连接语法,则不应允许您使用该日期之后引入的任何其他语言功能 :)
【解决方案2】:

你需要JOIN这两个表;有关连接概念,请参阅 MySQL 文档。

您需要限制两个日期之间的购买查询:

WHERE purchase BETWEEN 'date1' AND 'date2'

这将告诉您客户 ID。这样您就可以选择到客户表中,所以:

SELECT customer.customer_name,
       purchases.serial_number,
       purchases.purchase
    FROM customer
    JOIN purchases ON (customer.customer_id = purchases.purchase_id)
    WHERE purchases.purchase BETWEEN '2012-01-01' AND '2012-08-01';

【讨论】:

    猜你喜欢
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多