帮助查询 - 访问
问题描述:
我有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
答
在userMachine表上使用右或内连接。
select distinct machines.*,categories.category
from((machines right join UsersMachines on machines.idMachine=UsersMachines.idMachine) left join categories on machines.idcat=categories.idcat)
答
使用和外连接,并筛选链接表中的空值。
顺便说一句,有一个向导可以帮助你在所有版本的Access中都这样做。它被称为“查找不匹配的查询向导”。
或者,您也可以使用结构:
SELECT * FROM MACHINES
WHERE machineId NOT IN
(SELECT DISTINCT MachineId FROM USerMachine)
但这通常是慢在Access中运行。
是的,但这只适用于外连接。 – 2010-03-08 11:34:47
请问,有没有例子? – aco 2010-03-08 11:40:05
我已经添加了一个示例 – Fionnuala 2010-03-08 12:05:28