帮助查询 - 访问

时间:2010-03-08 10:21:31

标签: ms-access

我有4个表:机器,类别,用户和用户机器

计算机链接到类别 usersMachines

Machines
--------
idMachine 
machine
idCat

Categories
--------
idCat
category

Users 
--------   
idUser
nameUser

UsersMachines
--------
idUserMachine
idUser
IdMachine

要列出已为前3个表的任何字段筛选的计算机,我有以下查询:

select distinct machines.*,categories.category  
from( (machines 
left join  UsersMachines 
on machines.idMachine=UsersMachines.idMachine) 
left join categories 
on machines.idcat=categories.idcat)

好的,运行正常。

但是使用相同的查询,如何过滤只有链接用户的计算机?

3 个答案:

答案 0 :(得分:1)

据我所知,您需要从UsersMachines添加iduser字段(列)并检查它是否为null。

SELECT DISTINCT machines.*, categories.category, UsersMachines.idUser
FROM (machines 
LEFT JOIN UsersMachines 
ON machines.idMachine = UsersMachines.idMachine) 
LEFT JOIN categories 
ON machines.idcat = categories.idcat
WHERE UsersMachines.idUser Is Not Null

答案 1 :(得分:0)

在userMachine表上使用右连接或内连接。

  select distinct machines.*,categories.category  
    from( (machines right join  UsersMachines on machines.idMachine=UsersMachines.idMachine) left join categories on machines.idcat=categories.idcat)

答案 2 :(得分:0)

使用和外连接,并在链接表中过滤空值 顺便说一句,有一个向导可以帮助您在所有版本的Access中执行此操作。它被称为“查找不匹配的查询向导” 或者,您也可以使用IN构造:

SELECT * FROM MACHINES
WHERE machineId NOT IN 
(SELECT DISTINCT MachineId FROM USerMachine)

但在Access中运行速度通常较慢。