在另一个查询中使用SQL查询结果

3

我正在用一个下拉框填充一些名称。现在在点击这些名称中的任意一个后,我会执行以下操作:

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;
        }
2个回答

2
听起来你想使用内连接。
var Cmd = new SqlCommand(@"SELECT Id, SECONDTABLE.* FROM FIRSTTABLE
   JOIN SECONDTABLE ON FIRSTTABLE.Id = SECONDTABLE.ClientId  
   WHERE Name ='" + ClientComboBox.Text + "';")

是的,我假设第一个表的id字段是唯一的,但我认为这是一个安全的假设;考虑到他没有尝试连接,很可能是主键/唯一列。 - Richard Theobald
我总是更喜欢使用join来展示两个表中的数据 :) 否则我会选择exists。这只是个人偏好,除非ID重复,否则你的Join方法没有问题。 - Pரதீப்
1
这意味着它在Client表中找不到Id列。不知道表结构,我无法提供更多帮助。 - Richard Theobald
1
@RichardTheobald,你说得非常正确。我在操作时出了点小错误。提醒自己,千万不要在午夜没有能量饮料的情况下编码。感谢你的帮助! - James Robert Singleton
1
正确。它将类似于SECONDTABLE.Column1,SECONDTABLE.Column2等。 - Richard Theobald
显示剩余9条评论

0

在单个查询中像这样

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

或者 存在(更好)

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

当我执行此操作时,我得到了“sqlDataAdap.Fill(dtRecord);”后面的“;”附近的语法错误。 - James Robert Singleton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接