代码之家  ›  专栏  ›  技术社区  ›  pistacchio

来自单个查询的数据关系

  •  0
  • pistacchio  · 技术社区  · 16 年前

    我有下面一段VB.NET代码:

        Dim conn As New MySql.Data.MySqlClient.MySqlConnection(ConnectionString)
        conn.Open()
    
        Dim sql = "SELECT * FROM users"
        Dim com = New MySql.Data.MySqlClient.MySqlCommand(sql, conn)
    
        Dim ds As New DataSet("dsUsers")
    
        Dim da As New MySql.Data.MySqlClient.MySqlDataAdapter()
        da.SelectCommand = com
        da.TableMappings.Add("Table", "Users")
        da.Fill(ds)
    
        sql = "SELECT * FROM messages"
        com = New MySql.Data.MySqlClient.MySqlCommand(sql, conn)
    
        Dim da2 As New MySql.Data.MySqlClient.MySqlDataAdapter()
        da2.SelectCommand = com
        da2.TableMappings.Add("Table", "Messages")
        da2.Fill(ds)
    
        Dim dr As DataRelation
        Dim col1 As DataColumn
        Dim col2 As DataColumn
    
        col1 = ds.Tables("Users").Columns("id")
        col2 = ds.Tables("Messages").Columns("users_id")
        dr = New DataRelation("UsersMessages", col1, col2)
    
        ds.Relations.Add(dr)
    

    基本上,我执行两个查询:第一个查询获取所有用户,第二个查询获取所有消息。我在一个数据集中定义了两个表,并通过一个数据关系将它们链接起来,这样用户表就是消息表的父表。

    如果我想从这两个表中选择所有行,这是可行的,但是如果我有一个更复杂的结构,其中包含4个嵌套表和条件查询,那会怎么样?

    SELECT t1.*, t2*, t3.*, t4.*
    FROM table1 t1, table2 t2, table3 t3, table4 t4
    WHERE t1.id = 3
          AND t2.t1_id = t1.id
          AND t3.t2_id = t2.id
          AND t4.t3_id = t3.id
    

    如何从这个查询创建一个包含四个表和三个数据关系的数据集?

    谢谢

    1 回复  |  直到 16 年前
        1
  •  1
  •   Guffa    16 年前

    这样做的唯一方法是编写执行此操作的代码,即在数据集中创建表,设置表之间的关系,并用结果中的某些字段填充表。

    没有自动的方法可以做到这一点,因为在结果中没有关于每个字段来自哪个表的信息,甚至没有查询哪些表来获得结果的信息。