【问题标题】:SQL JOIN: Just not able to understand themSQL JOIN:只是无法理解它们
【发布时间】:2013-06-13 12:14:24
【问题描述】:

现在,我知道这个与JOIN 相关的问题已经被问过很多次了。我经历了很多。但我仍然不清楚。我也读过这些文章:http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins#_commentshttp://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html 但不,它仍然没有帮助。

我在数学上确实了解静脉图,但无法掌握 JOIN 背后的基本概念。

假设我有两张桌子。

tbl_bookdescription:

|书号 |书名 |书评 |作者 | ------------------------------------------------ | 1 | SQL 基础 |酷 | 1 | | 2 | PHP 基础 |好 | 2 | | 3 | AJAX 基础 |精湛 | 2 | | 4 | HTML 基础 |很好 | 3 |

tbl_authordescription

|作者 |作者姓名 | ------------------------- | 1 |汤姆 | | 2 |杰瑞 | | 3 |菲尔 |

我想为我的网站编写一个搜索引擎脚本

所以,当用户输入Tom$searchTerm 时,我希望程序返回由Tom 编写的书名。同时,用户也可以输入Good。这次查询应该再次返回书名。所以,我想做这样的事情

SELECT bookname FROM tbl_bookdescription MATCH(bookReview) AGAINST('$searchTerm')` 

然后是 UNION 这个表和 SOMETHING(匹配 authorName 和 $searchterm 的东西)。

现在,有两个问题:

  1. 这个查询对吗?它会给我想要的结果吗?

  2. 我应该在代码中写什么来代替SOMETHING。我想我必须JOIN 两张桌子(不确定)。也不知道怎么加入。

帮助表示赞赏。

【问题讨论】:

    标签: mysql join


    【解决方案1】:

    如果您只使用一个搜索词进行搜索,那么您的查询可能类似于

    SELECT b.*, a.*
      FROM tbl_bookdescription b JOIN tbl_authordescription a
        ON b.authorID = a.authorID
     WHERE b.bookName   LIKE '%searchterm%'
        OR b.bookReview LIKE '%searchterm%'
        OR a.authorName LIKE '%searchterm%'
    

    如果您将searchterm 替换为“Tom”,您将得到

    |书号 |书名 |书评 |作者 |作者姓名 | -------------------------------------------------- ---------- | 1 | SQL 基础 |酷 | 1 |汤姆 |

    现在,如果它是“好”,那么

    |书号 |书名 |书评 |作者 |作者姓名 | -------------------------------------------------- ------------ | 2 | PHP 基础 |好 | 2 |杰瑞 | | 4 | HTML 基础 |很好 | 3 |菲尔 |

    这里是SQLFiddle演示

    【讨论】:

    • 我不知道还有什么东西叫 SQLFiddle :)
    • 你只是在这里使用JOIN。它是哪个连接? INNER JOIN?
    • 如果我有另一张桌子怎么办.. 我也可以这样加入吗?
    • @NavneetSaini 如果您只使用JOIN,则意味着它是INNER JOIN。如果你想使用外连接之一,你需要明确地说LEFTRIGHTFULL(虽然MySql没有实现FULL连接)。
    • @NavneetSaini 如果您只需要 tbl_bookdescription 中的列,则从 SELECT 子句中删除 a.*。你把它放在那里是为了让你可以看到作者的名字。
    【解决方案2】:

    试试这个查询

    SELECT 
        a.* 
    FROM 
        tbl_bookdescription a
    INNER JOIN 
        tbl_authordescription b
    ON 
        a.authorid = b.authorid 
    WHERE 
        b.authorname=''
    

    【讨论】:

    • 你能告诉我a是什么,b是什么吗?
    • 然后再回答一个问题。难道我们不使用AS 我们想给某事起别名吗?
    • 两个选项都可以,也可以不用as直接给别名
    • 我也这样加入第三张桌子吗?
    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多