我有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)
好的,运行正常。
但是使用相同的查询,如何过滤只有链接用户的计算机?
答案 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中运行速度通常较慢。