0

环境:连接到 Access 数据库的 Visual Basic Asp.net

好的,为我正在处理的数据库组合一个 Select 语句,我很难过。希望你们中的一个人能想出​​一个解决方案!

Laying out the problem:
Table Name: CONTACTS
Field: ContactID (primary key, autonumber)
Field: UserName [this is being used to identify the user easily from Asp.net]

Table Name: APPLICANT
Field: ContactID (primary foreign)
Field: JobID (primary foreign)

Table Name: JOB
Field: JobID (primary key, autonumber)
Field: Description
Field: Class
Field: Type

我需要的是 * 从 JOB 那里获得他们尚未申请的工作。当他们申请了一个工作时,它通过 APPLICANT 表中的 ContactID 和 JobID 的组合键来反映。

我可以通过两个查询在 Access 中完成此操作:

SELECT Applicant.JobID
FROM Contacts INNER JOIN Applicant ON Contacts.[ContactID] = Applicant.[ContactID]
WHERE (((Contacts.UserName)='Test002'));

SELECT Job.JobID, Job.Description, Job.JobType, Job.JobClass
FROM Job LEFT JOIN [Applicant Query] ON Job.[JobID] = [Applicant Query].[JobID]
WHERE ((([Applicant Query].JobID) Is Null));

其中 [Applicant Query] 当然是指第一个查询。

现在,因为 UserName 被用于识别用户,所以它必须包含在查询中,这就是困难所在。在 Visual Studio 中,我知道如何将参数传递给 Select 命令。但是,我似乎无法将参数传递给子查询。为了在我的解释中详尽无遗,“Test002”是我希望用参数替换的部分。

我希望你们知道解决这个问题的方法,或者,如果失败了,是一种完全规避问题的天才方法。提前感谢您的时间和帮助。

4

1 回答 1

0

如何使用子查询将其组合成单个查询?它看起来像这样:

SELECT Job.JobID, Job.Description, Job.JobType, Job.JobClass
FROM Job 
LEFT JOIN (
  SELECT Applicant.JobID
  FROM Contacts INNER JOIN Applicant ON Contacts.[ContactID] = Applicant.[ContactID]
  WHERE ((Contacts.UserName)='Test002')) AS subqry
ON Job.[JobID] = [subqry].[JobID]
WHERE (([subqry].JobID) Is Null));

这是相同的逻辑,只是使用单个查询而不是两个查询。

于 2013-04-15T17:08:41.183 回答