如何从单个查询中的两个不同的select语句获取ID?
我很难运行此代码,我有两个选择语句在一个单一的查询与不同的“声明”,我想要的只是将其插入数据库只是“ID”只有这里是代码,如何从单个查询中的两个不同的select语句获取ID?
sqc.Open();
cmd = sqc.CreateCommand();
cmd.CommandText = "Select DepID from UserDept where Department [email protected] and Position [email protected] union all Select SalaryID from Salaries where Gradenumber [email protected] and StepNumber [email protected]";
cmd.Parameters.AddWithValue("@depe", cmbDept.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@posi", cmbPos.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@gn", cmbgrade.SelectedItem.ToString());
cmd.Parameters.AddWithValue("@sn", cmbstep.SelectedItem.ToString());
sda = new SqlDataAdapter(cmd);
dt = new DataTable();
sda.Fill(dt);
foreach (DataRow rr in dt.Rows)
{
cmd = sqc.CreateCommand();
cmd.CommandText = "insert into UserInfo2 (AccountID,DeptID,SalaryGrade,DateEmp,DateHired) Values (@idd,@dep,@sal,@emp,@hired)";
cmd.Parameters.AddWithValue("@idd", "crap");
cmd.Parameters.AddWithValue("@dep", rr[0].ToString());
cmd.Parameters.AddWithValue("@sal", rr[1].ToString());
cmd.Parameters.AddWithValue("@emp", dtpEmployed.Value.ToShortDateString());
cmd.Parameters.AddWithValue("@hired", dtpPromoted.Value.ToShortDateString());
cmd.ExecuteNonQuery();
MessageBox.Show("Information successfully saved!", "Information!", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
sqc.Close();
什么即时试图做的是,如果列名DEPID子项目必须dep232和SALARYID是SAL 232
我尝试在INSERT语句
cmd.Parameters.AddWithValue("@dep", rr[0].ToString());
cmd.Parameters.AddWithValue("@sal", rr[0].ToString());
这段代码的输出是列名DEPID它有子项sal243,它应该只有SALARYID 并且还有另一个DEPID是dep243的数据,但salaryID也有dep243。
好了,你有2个查询,他们给你的部门ID和工资等级。如果这两个查询中的任何一个只返回一行,那么你可以这样做脱身:
cmd.CommandText = @"select * from
(
Select DepID
from UserDept
where Department [email protected] and Position [email protected]
) a cross join
(
Select SalaryID
from Salaries
where Gradenumber [email protected] and StepNumber [email protected]
) b";
字符串开头的@可以让它运行多行,方便格式化和使sql更容易阅读。
如果两个查询都返回多行,请不要这样做。你必须将两个表内联在一起。在你的问题中没有足够的信息来确定如何去做;表格之间的关系并不明显
有很好的理由避免使用AddWithValue,但这是一篇博文(您可以搜索它),而不是我可以在这里输入一行。尽管如此你基本上都会调用所有组合选定项目的字符串,而不会真正考虑数据库中数据的类型。如果在数据库中,像gradenumber这样的东西存储为数字,至少应该调用addwithvalue并传递一个数值(即Convert.ToInt32(combo.selecteditem))而不是字符串(您当前的.ToString() ing方法)
它返回两行,但第一行的工资和部门ID具有相同的ID为sal243,第二行也具有相同的项目(dep243)在列(工资&dep) 我真正想要发生的事情是给我一行,如果它的DEPID项只应该是dep243,而对于salaryID则应该是sal243。 –
您将需要修改您的查询,以便获得的行数是您想要的行数。如果你想要一行,我会和243返回两次,这是因为两行匹配你的where子句。修改where子句,只有一行匹配。做选择*将有助于 –
是的,这是我的问题ahaha。你可以为我做或给我一个提示吗? –
你到底想做什么?两张桌子之间没有联系。这样你最终会搞乱第三张表中的所有数据。 – Shahbaz