【发布时间】:2015-05-15 08:05:24
【问题描述】:
我想从tbl_books、tbl_books_author 和tbl_books_subject 三个表中搜索“法律”。我正在运行以下查询。
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 秒)”。你能解释一下为什么会显示这个吗?
这是什么原因?
【问题讨论】:
-
您实际上是在创建一个涉及 3 个表的 Cartesian product。您希望它返回什么?那3张表不应该用外键连接吗?你真的有一个叫“法律”的作者吗?
-
我应该使用 INNER JOIN 连接所有表,然后运行查询。所有表都以 id 作为主键。