从具有特定搜索的多表格中获取记录

时间:2017-05-02 11:09:43

标签: c# mysql sql

我正在开发图书馆自动化系统。

表格

book(id,name,author,code)

student(id, name,surname,number)

lend_book(id, book_id[fk from book],student_id,lend_date,receive_case) 

{student_id和book_id foreging key,receive_case is tinyint(1)}

所以我需要一个sql查询如何搜索书名,作者或代码和/或(如果是用户输入)学生姓名,姓氏或号码和/或书籍是收到,未收到或两种情况。

query = "SELECT s.name, s.surname,s.number,b.name, b.code, b.author,lb.lend_date,l.delivery_date from student"+
                    "JOIN  book b ON (b.name like '%{1}%' OR b.code like '%{1}%' OR b.code like '%{1}%')" +
                    "JOIN lend_book lb ON (lb.recieve_case={2})"+
                    "WHERE (s.name like '%{0}%' OR s.surname like '%{0}%' OR s.number like '%{0}%') ;";

由于

2 个答案:

答案 0 :(得分:0)

SELECT b.Id,b.Name,b.Code,s.Id,s.Name,s.Surname,s.Number,l.lend_date,l.receive_case

FROM book b     LEFT OUTER JOIN lend_book l ON b.id = l.book_id     LEFT OUTER JOIN学生ON s.id = l.student_id

WHERE    (b。名称如'%{0}%'或b.author喜欢'%{1}%'或b.code喜欢'%{2}%')    AND / OR    (s.Name喜欢'%{3}%'或s.surname喜欢'%{4}%'或s.number喜欢'%{5}%')    AND / OR    (l.receive_case = {6} OR {6} IS NULL)

如果{6}的值为1,它将返回receive case = 1的位置。 如果{6}的值为0,则返回接收大小写= 0的位置。 要获取两种情况下的所有记录,{6}的值应为null。或者,如果null不适合您的情况,那么您可以使用0/1以外的任何数字并将最后一个条件更改为{6} =

答案 1 :(得分:0)

谢谢大家,我解决了。

  "SELECT DISTINCT s.name, s.surname,s.number,b.name, b.code, b.author,lb.lend_date,lb.delivery_date from student s " +
  " JOIN lend_book lb ON (lb.recieve_case={2} OR lb.recieve_case={2})" +
  " JOIN  book b ON (b.name like '%{1}%' OR b.code like '%{1}%' OR b.code like '%{1}%') " +
  " JOIN student ON (s.name like '%{0}%' OR s.surname like '%{0}%' OR s.number like '%{0}%')"+
  " WHERE s.id=lb.student_id AND b.id=lb.book_id;";