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