mysql加入问题 - 我这样做是对的

时间:2011-09-22 01:06:10

标签: mysql join

您好我有一个优惠券系统,它使用一个表(称为“优惠券”)来存储关于可以生成的每种类型的可用优惠券的信息,以及另一个表(生成的优惠券)来存储关于生成的每个优惠券的信息。我很难比较每个表格中的信息。

模式:

table: coupons
+----+------+--------------------+---------------+
|  id| owner|     date_expiration| limit_per_user|
|  15|    34| 2011-09-18 00:00:00|              2|
+----+------+--------------------+---------------+

table: generatedcoupons
+----+----------+------+--------------------+------+--------+
|  id| coupon_id| owner|                date|  used| user_id|
|   1|        15|    34| 2011-09-17 00:00:00| false|     233|
+----+----------+------+--------------------+------+--------+

我正在尝试为给定用户选择所有过期的优惠券。这是对的吗?

select *
from coupons
join generatedcoupons on user_id = 233 and coupon_id=coupons.id
where coupons.owner=34 and (curdate()>date(coupons.date_expiration)

2 个答案:

答案 0 :(得分:1)

您需要加入所有者和优惠券ID。然后将要筛选的值放在where子句中。

select *
from coupons c
join generatedcoupons g on c.owner=g.owner and g.coupon_id=c.id
where g.user_id = 233 and c.owner=34 and (curdate()>date(c.expiration_date)

答案 1 :(得分:1)

一些事情:

  1. 您的SQL有错误,因为列的名称是expiration_date而不是date_expiration。

  2. 如果coupon_id 15的所有者总是(按照定义)所有者34,那么您不应该在generatedcoupons表中重复所有者列。这样做是多余的,可能会造成这样一种情况:两个表格不同意,你无法弄清楚正确的数据是什么。

  3. 您正确理解了查询的JOIN部分和查询的WHERE部分,但是您在JOIN部分而不是WHERE部分中放置了过滤条件(user_id = 123)。

    < / LI>
  4. 您标记了问题嵌套查询,但问题实际上并不涉及任何嵌套查询,而是直接的JOIN。