2014-02-17 58 views
0

注時:這本書的ID是它的標題奇怪違反外鍵約束在子表中,如果從父表中選擇

insert ignore into category_book 
select 1 as user_id, 'name' as category_name, b.id as book_id 
from book b 
where b.id regexp('word') AND b.id IS NOT NULL 

我得到:

MySQL錯誤1452:不能添加或更新子行:外鍵約束失敗(bookcategory_book,約束fk_category_book_book1外鍵(book_id)參考文獻bookid)ON DELETE CASCADE ON UPDATE CASCADE)

+0

「category_book」的定義是什麼?你的列是否按正確的順序?它始終是一個明確列出要插入的列的好主意,它將在未來驗證您的代碼以防止任何模式更改,以及使讀取代碼的人立即明白插入到哪裏的內容。 – GarethD

+0

您是否_sure_'category_book'的字段爲'user_id,category_name,book_id' _in order_?在select中命名它們很少,你可能想指定INSERT INTO category_book(user_id,category_name,book_id)SELECT ...' – Wrikken

+0

我們修正了這個問題,這是我們在select語句中的列順序錯了,它應該是book_id,category_name,user_id。 @Wrikken感謝您指出它 – edward

回答

0

看起來您正試圖將記錄插入category_book,其book_id在表中不存在。可能是訂單category_book列與您在select中提供的列不同。嘗試相同的查詢,但指出插入子句中的列。