2015-05-15 58 views
-1

我想從三張表tbl_books,tbl_books_authortbl_books_subject中搜索「law」。我正在運行以下查詢。使用我的查詢從多個表中搜索關鍵字,

SELECT * 
FROM tbl_books p, tbl_books_author d, tbl_books_subject m 
WHERE p.title = 'law' 
OR d.author = 'law' 
OR m.subject = 'law' 
LIMIT 0,30; 

當運行此查詢它顯示在最前面 「顯示行0 - 29(1759260總計,查詢花費5.1206秒)」。你能解釋一下爲什麼它會顯示這個。

這是什麼原因?

+2

你基本上建立一個[笛卡爾乘積(HTTP: //en.wikipedia.org/wiki/Cartesian_product)涉及3個表格。您希望它返回什麼?這3張桌子是不是應該用外鍵連接?你真的有一個叫「法律」的作者嗎? – Marian

+0

如果我使用INNER JOIN連接所有表,然後運行查詢。所有的表都有id作爲主鍵。 –

+1

聽起來像一個計劃! –

回答

0

正如已經指出的那樣,您正在做笛卡爾積,即將第一個表中的所有記錄與第二個表中的所有記錄和3d表中的所有記錄進行匹配。

你可能有關聯表國外一些鍵,這樣你的查詢應該是這樣的:

SELECT * 
FROM tbl_books p 
INNER JOIN tbl_books_author d ON inner_join_condition1 
INNER JOIN tbl_books_subject m ON inner_join_condition2 
WHERE p.title = 'law' 
OR d.author = 'law' 
OR m.subject = 'law' 
LIMIT 0,30; 

與你的表之間inner_join_conditions填寫