根据日期和其他表选择行

时间:2009-03-27 19:18:03

标签: mysql

我有三张桌子:

computers, which has columns for id, serial number, make, model, etc
users, which has columns for id, real name
computer_usage, which has columns id, computer_id, user_id, start_date, end_date

数据库记录我们拥有的所有计算机,我们的用户以及何时使用计算机的人。

我想运行一个查询,选择所有没有当前用户的计算机。

这将是:

在computer_usage中根本不存在computer_id 要么 在computer_usage中确实存在一个具有end_date的computer_id

选择这些记录的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

试试这个:

SELECT * 
FROM computers 
WHERE id NOT IN 
    (SELECT computer_id 
     FROM computer_usage
     WHERE end_date is NULL)

子查询显示当前正在使用的所有计算机(记录存在,因此我们假设它有一个start_date,但没有分配end_date)。

我假设在“使用”完成之前,不会填充end_date。如果这不正确(例如,如果预先分配了结束日期),那么只需执行:

SELECT * 
FROM computers 
WHERE id NOT IN 
    (SELECT computer_id 
     FROM computer_usage
     WHERE start_date < getDate()
     AND end_date > getDate())

子查询仍显示当前“正在分配”的所有计算机。只需查找不在该组中的所有计算机。 (请注意,我使用了“getDate”,这是一个MS SQL函数。我认为mysql等价物与TIMESTAMP有关。)