3 在一个查询中选择其中一个具有多个表的 where 条件
3 Selects In One Query One Of Which A Where Condition With Multiple Tables
我使用 Microsoft Access。在这里,我实现了 OleDb 并向您展示了我的连接字符串。我的数据库由 3 Table 组成。计算机、用户和 "Junction" Table 计算机用户。一个用户可以拥有多台电脑。我的目标是在 DataGridView 中读出计算机的每个组件及其 ID,并在最后一个组件旁边的最后一列中读出该行中计算机的用户。为此,我需要查询,我已经用谷歌搜索了很长时间,但除了 group concat 之外没有找到任何东西,这对于 Access 来说似乎不现实,而且由于我几乎是编程的新手,有点太复杂了我,或者至少我没有找到关于 VB.NET
的任何好的解释 videos/posts
进口System.Data.OleDb
ConnectionString: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;
Persist Security Info=False;
Table 用户:
us_id | us_firstname | us_lastname | us_departement
1 | Michael | Rotter | IT
2 | Peter | Parker | Photographing
3 | Jonas | Klos | Director
Table 计算机
co_id | co_name | co_gpu | co_cpu (6 more columns to this
1 | PC090 | 1080 | 2700X table, ram, psu, etc)
2 | PC040 | 1070 | R5 1600
3 | PC066 | 1060 | i5-6600K
Table 计算机用户:
co_id | us_id
1 | 1
1 | 2
2 | 2
3 | 3
我希望结果如何(故意忽略 ram、psu 等)
co_id | co_gpu | co_cpu | us_firstname
1 | 1080 | 2700X | Michael, Peter
2 | 1070 | R5 1600 | Peter
3 | 1060 | i5-6600K | Jonas
我用来简单地将所有组件从 Computer 读取到 DataGridView 中的代码
Dim con as new oledbconnection(conn), cmd as new oledbcommand(Nothing,
con)
Dim reader as oledbdatareader
cmd.commandtext = "SELECT * FROM Computer"
con.open
reader = cmd.executereader
DataGridView1.Rows.Clear
While reader.read
DataGridView1.Rows.Add(reader("co_id"),
reader("co_name"),
reader("co_gpu"),
reader("co_cpu"))
End While
Con.Close
Reader.Close
我真的希望我已经尽可能清楚地说明了这一点。如果没有,请立即询问,我会尽力而为。这也是我第一次 post 来到这里,我希望我没有做错任何事。
您需要加入表格。根据提供的描述,您的查询可能如下所示:
SELECT ComputerUsers.*, Users.*, Computers.* FROM (ComputerUsers INNER JOIN Computers ON ComputerUsers.co_id = Computers.co_id) INNER JOIN Users ON ComputerUsers.us_id = Users.us_id
我使用 Microsoft Access。在这里,我实现了 OleDb 并向您展示了我的连接字符串。我的数据库由 3 Table 组成。计算机、用户和 "Junction" Table 计算机用户。一个用户可以拥有多台电脑。我的目标是在 DataGridView 中读出计算机的每个组件及其 ID,并在最后一个组件旁边的最后一列中读出该行中计算机的用户。为此,我需要查询,我已经用谷歌搜索了很长时间,但除了 group concat 之外没有找到任何东西,这对于 Access 来说似乎不现实,而且由于我几乎是编程的新手,有点太复杂了我,或者至少我没有找到关于 VB.NET
的任何好的解释 videos/posts进口System.Data.OleDb
ConnectionString: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;
Persist Security Info=False;
Table 用户:
us_id | us_firstname | us_lastname | us_departement
1 | Michael | Rotter | IT
2 | Peter | Parker | Photographing
3 | Jonas | Klos | Director
Table 计算机
co_id | co_name | co_gpu | co_cpu (6 more columns to this
1 | PC090 | 1080 | 2700X table, ram, psu, etc)
2 | PC040 | 1070 | R5 1600
3 | PC066 | 1060 | i5-6600K
Table 计算机用户:
co_id | us_id
1 | 1
1 | 2
2 | 2
3 | 3
我希望结果如何(故意忽略 ram、psu 等)
co_id | co_gpu | co_cpu | us_firstname
1 | 1080 | 2700X | Michael, Peter
2 | 1070 | R5 1600 | Peter
3 | 1060 | i5-6600K | Jonas
我用来简单地将所有组件从 Computer 读取到 DataGridView 中的代码
Dim con as new oledbconnection(conn), cmd as new oledbcommand(Nothing,
con)
Dim reader as oledbdatareader
cmd.commandtext = "SELECT * FROM Computer"
con.open
reader = cmd.executereader
DataGridView1.Rows.Clear
While reader.read
DataGridView1.Rows.Add(reader("co_id"),
reader("co_name"),
reader("co_gpu"),
reader("co_cpu"))
End While
Con.Close
Reader.Close
我真的希望我已经尽可能清楚地说明了这一点。如果没有,请立即询问,我会尽力而为。这也是我第一次 post 来到这里,我希望我没有做错任何事。
您需要加入表格。根据提供的描述,您的查询可能如下所示:
SELECT ComputerUsers.*, Users.*, Computers.* FROM (ComputerUsers INNER JOIN Computers ON ComputerUsers.co_id = Computers.co_id) INNER JOIN Users ON ComputerUsers.us_id = Users.us_id