2

私は本を​​置いたテーブルを持っています。各本には複数のコピーがある可能性があり、各コピーにコピー番号を付けたいと考えています。

TABLE:
BOOK(book_pk, book_name, book_copy);

基本的に各 book_pk は一意ですが、同じ book_name を持つ行が 2 つある場合は、1 つの book_copy を 1 に設定し、もう 1 つを 2 に設定する必要があります。

TABLE ROWS:
1, AAA, 1
2, BBB, 1
3, AAA, 2
4, CCC, 1
5, BBB, 2

したがって、同じ book_name の新しいタプルを挿入するときに、主キーを自動インクリメントし、copyNumber を追跡したいと考えています。

4

2 に答える 2

2

試す:

INSERT INTO Book (book_name, book_copy) 
VALUES ( 
   'AAAA',
    (SELECT copy FROM ( SELECT IFNULL(MAX(book_copy),0)+1 as copy FROM Book) AS d)
);
于 2012-11-18T07:41:52.070 に答える
1

短いバージョンは、MySQL ではデータベースから直接行うことができないということです。おそらく、これは 2 つのテーブルで最もよく説明されています。BookテーブルとテーブルBookCopy。テーブルは、あなたが持っているのBookと同じように自動インクリメントを持つことができます。BookCopyテーブルにも自動インクリメントがありますが、テーブルを参照しますBook。このようにして、コピーを持たない Book を持つことができ、不明な の を持つことはできませBookCopyBook

Book Table
Book(book_pk (auto increment), book_name, ...)

BookCopy Table
BookCopy(book_copy_pk (auto increment), book_pk (foreign key), ...)
于 2012-11-18T02:30:27.083 に答える