-1

私は3つのテーブルを持っています -

books (bookid,bookname)

member(mid,mname)

transaction(transid,bookid,mid,ttype,issue_dt,due_dt,transremark)

今、私はmsqlクエリを持っています-

SELECT (select count(*) FROM transaction where ttype='issue') as rownum,
transid,bookid,mid,ttype,issue_dt,due_dt,transremark 
FROM transaction 
WHERE ttype='issue' 
ORDER BY transid 
LIMIT 1 offset 3;

bookname上記のクエリに含まれるandmnameを取得したい.. booknamebookidmidmname とともに上記のクエリの結果を取得できるクエリを提案してください.. よろしくお願いします...

4

4 に答える 4

1

これを試して ::

SELECT
count(1) as rownum,
transid,
b.bookid,
m.mid,
ttype,
   issue_dt,
    due_dt,
    transremark, 
    b.bookname,
    m.mname
    from transaction t
    INNER JOIN books b on (b.bookid=t.bookid)
    INNER JOIN member m on (t.mid=m.mid)
    where ttype='issue' ORDER BY transid LIMIT 1 offset 3;
于 2013-01-24T09:04:50.540 に答える
0

以下のクエリを試すことができます

SELECT bookname, mname, temp.*
FROM books, member,
(SELECT (select count(*) FROM transaction where ttype='issue') as 
rownum,transid,bookid,mid,ttype,issue_dt,due_dt,transremark 
from transaction where 
ttype='issue' 
ORDER BY transid LIMIT 3,1) as temp
WHERE books.bookid = temp.bookid
AND member.mid = temp.mid

うまくいかない場合は、LIMIT句を削除してみてください。

于 2013-01-24T08:57:58.850 に答える
0

これを試して:

SELECT b.bookname, m.mname 
FROM (transaction AS t 
LEFT JOIN books AS b
ON b.bookid = t.bookid)
LEFT JOIN member AS m 
ON m.mid = t.mid
WHERE t.ttype='issue';

サンプルデータ:

CREATE TABLE books(
  bookid INT AUTO_INCREMENT PRIMARY KEY,
  bookname VARCHAR (50)
);


CREATE TABLE member(
  mid INT AUTO_INCREMENT PRIMARY KEY,
  mname VARCHAR (30)
);

CREATE TABLE transaction(
  transid INT AUTO_INCREMENT PRIMARY KEY,
  bookid INT,
  mid INT,
  ttype VARCHAR (10),
  issue_dt DATETIME,
  due_dt DATETIME,
  transremark varchar(200)
);

INSERT INTO books(bookname)
VALUES ("Harry Potter and the Philosopher's Stone"), ("Harry Potter and the Chamber of Secrets"), ("Harry Potter and the Prisoner of Azkaban");

INSERT INTO member(mname)
VALUES  ('bob'), ('jack'), ('joe');

INSERT INTO transaction(bookid,mid,ttype,issue_dt,due_dt,transremark)
VALUES (1,1,'issue', curdate(),curdate()+ INTERVAL 5 DAY, "UPS"),
(1,2,'issue', curdate(),curdate()+ INTERVAL 5 DAY, "UPS"),
(3,1,'issue', curdate(),curdate()+ INTERVAL 5 DAY, "UPS"),
(2,1,'issue', curdate(),curdate()+ INTERVAL 20 DAY, "UPS"),
(3,3,'no_issue', curdate(),curdate()+ INTERVAL 20 DAY, "FEDEX");

http://sqlfiddle.com/#!2/91b0d/5

編集:制限あり

SELECT b.bookname, m.mname 
FROM (transaction AS t 
LEFT JOIN books AS b
ON b.bookid = t.bookid)
LEFT JOIN member AS m 
ON m.mid = t.mid
WHERE t.ttype='issue'
LIMIT 1 offset 3;

http://sqlfiddle.com/#!2/91b0d/7

聞き間違いかもしれませんが、本名と会員名のみでお願いします。さらに情報が必要な場合は、このクエリも使用できます。上記の現在のクエリで SELECT * FROM を置き換えます。

プロジェクトをよろしくお願いします。

于 2013-01-24T10:42:00.943 に答える
0

以下に、役立つ可能性のあるクエリをいくつか示します。私はそれらをテストせずに提出しました。構文エラーが発生した場合は、これを書き直してください。また、他の考えが必要だと思う場合は、お知らせください....

SELECT transaction.*, member.mname, books.bookname
FROM transaction
INNER JOIN member ON transaction.mid = member.mid
INNER JOIN books ON transaction.bookid = books.bookid
WHERE transaction.ttype='issue' ;

このクエリを使用すると、すべてのメンバーの行を個別に取得できます。

于 2013-01-24T09:37:21.073 に答える