2015-05-15 57 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填写