【问题标题】:Using a SQL Query Result in another Query在另一个查询中使用 SQL 查询结果
【发布时间】:2016-05-08 17:40:28
【问题描述】:

所以我正在用名称列表填充一个组合框。现在单击其中一个名称后,我执行

SELECT Id FROM FIRSTTABLE WHERE Name ='" + ClientComboBox.Text + "'

现在我想获取该 ID 并在 SECONDTABLE 中执行另一个 Sql 查询。但是,在那个 SECONDTABLE Id 中称为 ClientId。另外我只想填充一次datagridview。所以我不想显示FIRSTTABLE结果,只显示我从SECONDTABLE结果中得到的结果。不确定这一切是否有意义,所以如果您有任何问题,请告诉我。

private void ClientComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {

            var myConnection = new SqlConnection(DBConnectionBox.Text);
            //myConnection.Open();


            var Cmd = new SqlCommand("SELECT Id FROM FIRSTTABLE WHERE Name ='" + ClientComboBox.Text + "';");
            Cmd.Connection = myConnection;
            Cmd.CommandType = CommandType.Text;

            var Cmd2 = new SqlCommand("SELECT * FROM SECONDTABLE WHERE ClientId ='"+"';");
            Cmd2.Connection = myConnection;
            Cmd2.CommandType = CommandType.Text;

            SqlDataAdapter sqlDataAdap = new SqlDataAdapter(Cmd);
            SqlDataAdapter sqlDataAdap2 = new SqlDataAdapter(Cmd2);

            DataTable dtRecord = new DataTable();
            DataTable dtRecord2 = new DataTable();

            sqlDataAdap.Fill(dtRecord);
            sqlDataAdap2.Fill(dtRecord2);

            ClientInfoDGV.DataSource = dtRecord;
            ClientInfoDGV.DataSource = dtRecord2;
        }

【问题讨论】:

    标签: c# mysql sql-server datagridview


    【解决方案1】:

    听起来你想使用内连接。

    var Cmd = new SqlCommand(@"SELECT Id, SECONDTABLE.* FROM FIRSTTABLE
       JOIN SECONDTABLE ON FIRSTTABLE.Id = SECONDTABLE.ClientId  
       WHERE Name ='" + ClientComboBox.Text + "';")
    

    【讨论】:

    • 如果第一个表中的 Id 重复并且结果将具有第二个表中的重复值。
    • 没错,我假设第一个表的 id 字段是唯一的,但我觉得这是一个安全的假设;鉴于他没有尝试加入,它很可能是主要/唯一列。
    • 这意味着它在Client表中找不到列Id。在不知道表结构的情况下,我真的无法为您提供更多帮助。
    • @RichardTheobald 你是绝对正确的。我胖手指了点东西。提醒自己,不要在没有能量饮料的情况下在午夜编码。感谢您的帮助!
    • 正确。它类似于SECONDTABLE.Column1, SECONDTABLE.Column2 等。
    【解决方案2】:

    像这样在单个查询中

    SELECT * 
    FROM   secondtable 
    WHERE  clientid IN (SELECT f.id 
                        FROM   firsttable f
                        WHERE  f.NAME = "clientcombobox.text") 
    

    Exists(首选)

    SELECT * 
    FROM   secondtable s 
    WHERE  EXISTS(SELECT 1 
                  FROM   firsttable f 
                  WHERE  s.clientid = f.id 
                         AND f.NAME = "clientcombobox.text") 
    

    【讨论】:

    • 当我这样做时,';' 附近出现不正确的语法为了 ;在 sqlDataAdap.Fill(dtRecord); 之后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多