帮助查询 - 访问

问题描述:

我有4个表:机器,类别,用户和usersMAchines帮助查询 - 访问

链接到类别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) 

好,运行良好。

但使用相同的查询,我如何才能过滤只有链接用户的机器?

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

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 
+0

是的,但这只适用于外连接。 – 2010-03-08 11:34:47

+0

请问,有没有例子? – aco 2010-03-08 11:40:05

+0

我已经添加了一个示例 – Fionnuala 2010-03-08 12:05:28

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

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

谢谢。并没有任何用户链接的机器? – aco 2010-03-08 10:56:03

+0

我不认为连接类型会解决这个问题。尤其不是正确的加入。 – Fionnuala 2010-03-08 11:19:56

+0

@Remou:当然,连接类型对此非常重要! – 2010-03-08 11:28:49

使用和外连接,并筛选链接表中的空值。
顺便说一句,有一个向导可以帮助你在所有版本的Access中都这样做。它被称为“查找不匹配的查询向导”。
或者,您也可以使用结构:

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

但这通常是慢在Access中运行。