所以首先对不起我的英语,我的母语是德语。
我有一个带有几个表的 ACCESS 数据库,数据库中充满了治疗植物,并且有一个名为“问题”的表,它看起来像这样:
列:ID -- 姓名 -- 头痛 -- 疼痛 -- 呕吐 -- 等等....
头痛等症状的列是 bool 值 - True 或 False。
现在我想做一个查询,要求用户(使用表单或文本输入的列表框)告诉他的指示,然后应该有一个物质/植物列表,其中值因为指示 (ColumnName) 为真。
我认为这是在表中搜索列的参数。
最佳答案
我会查看您的数据库的设计。如果另一个问题变得明显,那么为每个问题创建一个包含单独列的表格将是一件非常令人头疼的事情。
我可能会为此使用四个表:
- 用户:用户 ID(自动编号、PK)、用户名(文本)
- Plants:PlantID(AutoNum,PK),PlantName(文本)
- 问题列表:问题 ID(自动编号、PK)、问题描述(文本)
- User_Issues:UserID(Num,PK),PlantID(Num,PK),IssueID(Num,PK em>), HasIssue ( bool 值)
User_Issues 表有一个复合键,由其他表中的每个标识符组成 - 这将确保用户不会对一个工厂多次遇到相同的问题。
创建新用户时,将运行一个查询来更新 User_Issues 表:
INSERT INTO User_Issue(PlantID, IssueID, UserID)
SELECT PlantID, IssueID, UserID
FROM Plants, IssueList, Users
WHERE UserName = "Darren"
这将为每个用户从工厂和问题创建一个笛卡尔积。因此,例如,如果您有两个工厂和三个问题,您将创建 2x3 记录 - 这两个工厂可能有 6 个问题。
此 SQL 将允许您分配问题:
SELECT UserName
, PlantName
, IssueDesc
, HasIssue
FROM ((
User_Issue INNER JOIN Users ON User_Issue.UserID = Users.UserID)
INNER JOIN Plants ON User_Issue.PlantID = Plants.PlantID)
INNER JOIN IssueList ON User_Issue.IssueID = IssueList.IssueID
ORDER BY PlantName, IssueDesc
要查看问题,您只需将 WHERE HasIssue
添加到上述 SQL。
SELECT UserName
, PlantName
, IssueDesc
, HasIssue
FROM ((
User_Issue INNER JOIN Users ON User_Issue.UserID = Users.UserID)
INNER JOIN Plants ON User_Issue.PlantID = Plants.PlantID)
INNER JOIN IssueList ON User_Issue.IssueID = IssueList.IssueID
WHERE HasIssue
ORDER BY PlantName, IssueDesc
关于sql - MS Access VBA 选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44518695/