我有三张桌子:
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选择这些记录的最佳方法是什么?
答案 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有关。)