我在PC和软件许可之间有多对多关系,在第三张表Installs中表示。
+--------------------+
| tblPCs |
+--------------------+
| PCID (primary key) |
| ITTag |
| other useful info |
+--------------------+
+-----------------------------------+
| tblLic |
+-----------------------------------+
| SWLicID (primary key) |
| SWType (foreign key of tblSWType) |
| other useful info |
+-----------------------------------+
+-------------------------+
| tblInstall |
+-------------------------+
| InstallID (primary key) |
| PCID |
| SWLicID |
+-------------------------+
+-------------------+
| tblSWType |
+-------------------+
| SWTypeID |
| SWName |
| other useful info |
+-------------------+
我需要一个查询,该查询返回所有未安装ITTag
的PC中的SWType
。与包含用户选择的OnClick
的文本控件相比,我正在使用按钮的SWTypeID
事件来运行SQL。
当前SQL返回所有PC,包括已安装指定SWType
的任何许可证的PC。
SQL = "SELECT tblPCs.* " _
& "FROM tblPCs " _
& "WHERE tblPCs.PCID NOT IN " _
& "(SELECT I.EqID FROM tblInstall as I, tblLic as L WHERE I.SWLicID = L.SWLicID AND L.SWTypeID = " & CLng(txtSelSW) & ")"
我在做什么错了?
答案 0 :(得分:0)
可能有很多方法可以完成此操作,但是假设我已正确理解,我建议在嵌套LEFT JOIN
查询中使用SELECT
:
SELECT tblPCs.*
FROM
tblPCs LEFT JOIN
(
SELECT tblInstall.PCID
FROM tblInstall INNER JOIN tblLic ON tblInstall.SWLicID = tblLic.SWLicID
WHERE tblLic.SWType = 123456
) t
ON tblPCs.PCID = t.PCID
WHERE
t.PCID IS NULL
根据需要更改tblLic.SWType
的值。