首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中选择租用表,可以显示用户当前租借的项目

问在mysql中选择租用表,可以显示用户当前租借的项目
EN

Stack Overflow用户
提问于 2010-06-04 19:42:56
回答 1查看 345关注 0票数 0

如果您了解sakila sample数据库,那么选择用户当前租用的项目的语句是什么。如果不是,下面是代码说明:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `rentals` (
 `item_id` int(10) unsigned NOT NULL,
 `user_id` int(10) unsigned NOT NULL,
 `last_change_date` date NOT NULL,
 PRIMARY KEY  (`item_id`,`user_id`,`last_change_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

请注意,没有归还日期,这是因为上一个租户有不确定的租赁时间,直到有人要求此项目,它也被转移到新租户的不确定时间。用户可以租用多个项目,并且每个项目只有一块,因此item_id不能同时提供给两个用户。

我想按user_id显示当前租用的物品。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-04 20:00:56

代码语言:javascript
复制
SELECT r1.*
FROM   rentals r1
       LEFT JOIN rentals AS r2
         ON r1.item_id = r2.item_id
            AND r1.last_change_date < r2.last_change_date
WHERE  r2.last_change_date IS NULL  

这是一个典型的sql问题。答案是explained here。

使用

代码语言:javascript
复制
INSERT INTO rentals (item_id, user_id, last_change_date) VALUES (1, 1, '2009-01-01'), (1, 3, '2009-11-10'), (3, 3, '2009-02-13'), (3, 5, '2010-05-11'), (5, 5, '2010-06-04'), (7, 7, '2010-06-04'), (9, 9, '2010-06-04');

作为play-data,要理解该方法,请看下面的输出

代码语言:javascript
复制
SELECT r1.*,r2.*
FROM   rentals r1
       LEFT JOIN rentals AS r2
         ON r1.item_id = r2.item_id
            AND r1.last_change_date < r2.last_change_date

+---------+---------+------------------+---------+---------+------------------+
| item_id | user_id | last_change_date | item_id | user_id | last_change_date |
+---------+---------+------------------+---------+---------+------------------+
|       1 |       1 | 2009-01-01       |       1 |       3 | 2009-11-10       | 
|       1 |       3 | 2009-11-10       |    NULL |    NULL | NULL             | 
|       3 |       3 | 2009-02-13       |       3 |       5 | 2010-05-11       | 
|       3 |       5 | 2010-05-11       |    NULL |    NULL | NULL             | 
|       5 |       5 | 2010-06-04       |    NULL |    NULL | NULL             | 
|       7 |       7 | 2010-06-04       |    NULL |    NULL | NULL             | 
|       9 |       9 | 2010-06-04       |    NULL |    NULL | NULL             | 
+---------+---------+------------------+---------+---------+------------------+

前3列是指r1的列,后3列是指r2的列。

正如您所看到的,只要没有大于r1.last_change_date的r2.last_change_date,该值就为NULL。这些都是r1.last_change_date最好的行。因此,要查找所需的行,您可以使用以下条件

代码语言:javascript
复制
WHERE  r2.last_change_date IS NULL  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2973744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档