[英]What is the better way to select from table with two condition from the same column?
我一直在尝试选择具有三个条件的数据库,并且这两个条件来自同一列。
我有一个带有 usercontrol 的 flowlayoutpanel,我似乎无法查看同一列中具有不同值的所有数据。
我试过了
SELECT borrowID, studentID, bookTitle, dateBorrowed, dueDate, status FROM tblBorrowedBook WHERE status = 'Not Returned' AND status = 'Overdue' AND studentNum = @studentNum
但遗憾的是不起作用。
我也试过
public void BooksOnHand()
{
ucBooksOnHand uc = new ucBooksOnHand(this);
flowLayoutPanel1.Controls.Clear();
cn.Open();
cm = new SqlCommand("SELECT borrowID, studentID, bookTitle, dateBorrowed, dueDate, status FROM tblBorrowedBook WHERE status = 'Not Returned' AND studentNum = @studentNum", cn);
cm.Parameters.AddWithValue("@studentNum", frmissue.lblStudNo.Text);
dr = cm.ExecuteReader();
while (dr.Read())
{
//ucBooksOnHand uc = new ucBooksOnHand(this);
uc.Dock = DockStyle.Top;
uc.lblBorrowID.Text = dr["borrowID"].ToString();
uc.lblStudentID.Text = dr["studentID"].ToString();
uc.lblBookName.Text = dr["bookTitle"].ToString();
uc.lblDateBorrowed.Text = Convert.ToDateTime(dr["dateBorrowed"]).ToString("MM/dd/yyyy");
uc.lblDueDate.Text = Convert.ToDateTime(dr["dueDate"]).ToString("MM/dd/yyyy");
uc.lblStatus.Text = dr["status"].ToString();
uc.dtDueDate.Value = Convert.ToDateTime(dr["dueDate"]);
flowLayoutPanel1.Controls.Add(uc);
}
dr.Close();
cn.Close();
}
public void BooksOverdue()
{
cn.Open();
cm = new SqlCommand("SELECT borrowID, bookTitle, studentID, dateBorrowed, dueDate, status FROM tblBorrowedBook WHERE status = 'Overdue' AND studentNum = @studentNum", cn);
cm.Parameters.AddWithValue("@studentNum", frmissue.lblStudNo.Text);
dr = cm.ExecuteReader();
while (dr.Read())
{
ucBooksOnHand uc = new ucBooksOnHand(this);
uc.Dock = DockStyle.Top;
uc.lblBorrowID.Text = dr["borrowID"].ToString();
uc.lblStudentID.Text = dr["studentID"].ToString();
uc.lblBookName.Text = dr["bookTitle"].ToString();
uc.lblDateBorrowed.Text = Convert.ToDateTime(dr["dateBorrowed"]).ToString("MM/dd/yyyy");
uc.lblDueDate.Text = Convert.ToDateTime(dr["dueDate"]).ToString("MM/dd/yyyy");
uc.lblStatus.Text = dr["status"].ToString();
uc.dtDueDate.Value = Convert.ToDateTime(dr["dueDate"]);
flowLayoutPanel1.Controls.Add(uc);
}
dr.Close();
cn.Close();
}
上面的代码对我有用,但我正在为我的问题寻找更好、更简单的解决方案。
这是表中的一些数据
borrowID studentID bookID studentNum bookTitle dateBorrowed dueDate returnedDate status
10 1 1 2020-01-0001 Worthless 2020-03-30 2020-04-06 Mar 30 2020 Returned
11 1 1 2020-01-0001 Worthless 2020-03-23 2020-03-27 Mar 30 2020 Returned
12 1 2 2020-01-0001 Heartless 2020-03-30 2020-04-06 Not Returned
13 1 1 2020-01-0001 Worthless 2020-03-15 2020-03-28 Overdue
我想展示一个学生的所有书籍,该学生仍未归还且逾期。
我想要的示例输出:
Books In Possesion:
Book Name Status
----------|-------------
Heartless | Not Returned
Worthless | Overdue
您不能在具有两个不同值的同一列上使用AND
。 您需要在括号中为这些使用OR
,如下所示:
SELECT ... WHERE (status = 'Not Returned' OR status = 'Overdue') AND studentNum = @studentNum
另一种可能更好的方法是使用 IN 运算符。 如果您有两个以上的项目要检查,当然更好
SELECT ... WHERE status IN('Not Returned', 'Overdue') AND studentNum = @studentNum
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.