2017-05-24 117 views
0

比方說,我有一個規範化的數據庫,插入數據在規範化表

Students (RollNo, Name) - e.g. (1, "John") 
Books (BookCode, Name) - e.g. (1, "StoryBook"), (2, "Dictionary") 
Loans (RollNo, BookCode) - e.g. (1, 2) 

現在,「約翰」要貸款「Dictianry」;但是我不能在貸款表中插入(「john」,「Dictionary」),因爲它需要BookID和RollNo。

我的後端固件限制我每個請求一個查詢。

有沒有辦法在一個sql語句中做到這一點,而無需先查找書籍和插入的ID(使用兩個獨立的SQL)?

+0

嗯這種情況似乎有點陌生的工作?你怎麼知道約翰想買字典,但不知道約翰和字典的ID?您不應該使用名稱,而是始終使用ID。 –

+0

你已經說了規範化表格。但是這聽起來像你說過的那樣,這不是正常化的。我們可以認爲這是壞桌子的建設。 –

+0

案例:可以說這是一個有人可以購買書籍的網站。當用戶john登錄時,而不是隻在會話中存儲他的名字。還存儲他的ID。讓他借一本書的形式也一樣。不要只提交書名,還要發送書的ID。沒有任何情況下你想按名稱選擇ID。如果有三個約翰呢?總是使用唯一索引來存儲東西 –

回答

0

您可以使用子查詢,但是對於插入來說這似乎有點複雜。您可以將主鍵更改爲Name而不是RollNoBookCode,但這是不好的做法。

爲了避開它,你可以嘗試緩存學生和書籍。看起來很奇怪,你每個請求只限於一個查詢,也許你應該關注這個問題?

0

試試這個,我認爲它會在你的情況

insert into Loans (RollNo, BookCode) 
    select s.RollNo,b.BookCode from Students s 
    full join Books b on 0=0 
    where s.Name='John' and b.Name='Dictionary' 
+0

FULL JOIN無效MySQL語法我認爲你的意思是CROSS JOIN在這裏? 0 = 0也是奇怪JOIN操作總是如此。 –