【问题标题】:Searching a keyword from multiple tables using my query ,使用我的查询从多个表中搜索关键字,
【发布时间】:2015-05-15 08:05:24
【问题描述】:

我想从tbl_bookstbl_books_authortbl_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 作为主键。

标签: mysql select php


【解决方案1】:

正如已经指出的那样,您正在做一个笛卡尔积,即将第一个表中的所有记录与第二个表中的所有记录以及 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 2016-04-05
    • 2011-09-28
    相关资源
    最近更新 更多