Sql MS Access VBA选择查询

Sql MS Access VBA选择查询,sql,database,vba,ms-access,Sql,Database,Vba,Ms Access,首先对不起我的英语,我的母语是德语 我有一个ACCESS数据库,其中有几个表,数据库中充满了治疗植物,有一个表名为Issues,看起来是这样的: 列:ID-Name-头痛-疼痛-呕吐-等等 表示头痛等症状的列是布尔值-True或False 现在,我想做一个查询,要求用户使用表单中的列表框或文本输入告知其指示,然后应该有一个指示列名称值为true的物质/植物列表 我认为这是在表中搜索列的一个参数。我想看看数据库的设计。如果另一个问题变得明显,那么为每个问题创建一个单独列的表将是一个非常头疼的问题

首先对不起我的英语,我的母语是德语

我有一个ACCESS数据库,其中有几个表,数据库中充满了治疗植物,有一个表名为Issues,看起来是这样的:

列:ID-Name-头痛-疼痛-呕吐-等等

表示头痛等症状的列是布尔值-True或False

现在,我想做一个查询,要求用户使用表单中的列表框或文本输入告知其指示,然后应该有一个指示列名称值为true的物质/植物列表


我认为这是在表中搜索列的一个参数。

我想看看数据库的设计。如果另一个问题变得明显,那么为每个问题创建一个单独列的表将是一个非常头疼的问题

我可能会用四张桌子来做这个:

用户:UserID AutoNum、PK、用户名文本 植物:植物ID自动编号、主键、植物名称文本 IssueList:IssueID自动编号、主键、IssueDescription文本 用户问题:UserID Num,PK,PlantID Num,PK,IssueID Num,PK,HasIssue布尔值 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 hasuisse添加到上述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

我会看看你数据库的设计。如果另一个问题变得明显,那么为每个问题创建一个单独列的表将是一个非常头疼的问题

我可能会用四张桌子来做这个:

用户:UserID AutoNum、PK、用户名文本 植物:植物ID自动编号、主键、植物名称文本 IssueList:IssueID自动编号、主键、IssueDescription文本 用户问题:UserID Num,PK,PlantID Num,PK,IssueID Num,PK,HasIssue布尔值 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 hasuisse添加到上述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

哇!对于一个不完整的问题,多么完整的答案啊!下一件事就是把你的作品寄给他LOL@krishKM它可能满是洞。我不喜欢有一个追加查询来向User_Issue表添加值,但我想不出一种方法来列出SQL中每个工厂的所有问题,而不使查询不可更新。感谢Darren提供的详细答案!你的主意对我很管用!哇!对于一个不完整的问题,多么完整的答案啊!下一件事就是把你的作品寄给他LOL@krishKM它可能满是洞。我不喜欢有一个追加查询来向User_Issue表添加值,但我想不出一种方法来列出SQL中每个工厂的所有问题,而不使查询不可更新。感谢Darren提供的详细答案!你的主意对我很管用!