2017-05-02 16 views
0

私はライブラリオートメーションシステムに取り組んでいます。特定の検索でマルチテーブルからレコードを取得

TABLES

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とキーをforeging book_id、receive_caseはtinyint型である(1)}

だから私はそれが書籍名、著者やコードで検索AND /どのようにSQLクエリを必要としますOR(ユーザーがそれを入力した場合)、学生名、姓または番号AND/OR書籍を受信した、受信しなかった、またはその両方。

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}%') ;"; 

おかげ

+0

何が質問ですか?あなたが書いたSQLコードに何か問題はありますか? – Shadow

+0

これは私にsyntxエラー "b ON(b.nameは '%%'のようなb.nameまたは '%%'のようなb.codeまたは '%%'のようなb.code)JOIN lend_book lb '" –

答えて

0

SELECT b.Id、b.Name、b.Code、s.Id、s.Name、s.Surname、s.Number、l.lend_date、

をl.receive_case b.id = l.book_id LEFT OUTER JOIN学生S上s.id = l.student_id

WHERE(b.Name%」のような{0}%ON書籍B LEFT OUTER lend_book LをJOIN FROM

'OR b.author'%{1}% 'または'%{2}% 'のようなb.code) AND/OR (s.nameは '%{3}%'またはs.sameは '%{4}' 'または'%{5} ''のようなs.number) AND/OR (l.receive_case = {6 } OR {6} IS NULL)

{6}の値が1の場合、受信ケース= 1に戻ります。 {6}の値が0の場合、受信ケース= 0の場合は戻ります。 両方のケースですべてのレコードを取得するには、{6}の値をnullにする必要があります。または、あなたのケースでnullが適切でない場合は、0/1以外の任意の数値をとり、最後の条件を{6} =

+0

ありがとう私のような構文エラー 'b LEFT OUTER JOIN lend_book l ON b.id = l.book_id LEFT OUTER JOIN学生のON' –

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;"; 
関連する問題