2010-03-08 66 views
0

我有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) 

好,運行良好。

但使用相同的查詢,我如何才能過濾只有鏈接用戶的機器?

回答

1

據我所見,您需要從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

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

謝謝。並沒有任何用戶鏈接的機器? – aco 2010-03-08 10:56:03

+0

我不認爲連接類型會解決這個問題。尤其不是正確的加入。 – Fionnuala 2010-03-08 11:19:56

+0

@Remou:當然,連接類型對此非常重要! – 2010-03-08 11:28:49

0

使用和外連接,並篩選鏈接表中的空值。
順便說一句,有一個嚮導可以幫助你在所有版本的Access中都這樣做。它被稱爲「查找不匹配的查詢嚮導」。
或者,您也可以使用結構:

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

但這通常是慢在Access中運行。