您好我有一个优惠券系统,它使用一个表(称为“优惠券”)来存储关于可以生成的每种类型的可用优惠券的信息,以及另一个表(生成的优惠券)来存储关于生成的每个优惠券的信息。我很难比较每个表格中的信息。
模式:
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)
答案 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)
一些事情:
您的SQL有错误,因为列的名称是expiration_date而不是date_expiration。
如果coupon_id 15的所有者总是(按照定义)所有者34,那么您不应该在generatedcoupons表中重复所有者列。这样做是多余的,可能会造成这样一种情况:两个表格不同意,你无法弄清楚正确的数据是什么。
您正确理解了查询的JOIN部分和查询的WHERE部分,但是您在JOIN部分而不是WHERE部分中放置了过滤条件(user_id = 123)。
< / LI>您标记了问题嵌套查询,但问题实际上并不涉及任何嵌套查询,而是直接的JOIN。