SQL JOIN:只是无法理解它们

时间:2013-06-13 03:55:47

标签: mysql join

现在,我知道有多次询问与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:

| BOOKID |    BOOKNAME | BOOKREVIEW | AUTHORID |
------------------------------------------------
|      1 |  SQL Basics |       Cool |        1 |
|      2 |  PHP Basics |       Good |        2 |
|      3 | AJAX Basics |     Superb |        2 |
|      4 | HTML Basics |  Very Good |        3 |

tbl_authordescription

| AUTHORID | AUTHORNAME |
-------------------------
|        1 |        Tom |
|        2 |      Jerry |
|        3 |       Phil |

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

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

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

然后UNION此表包含SOMETHING(与authorName相对于$ searchterm的内容)。

现在,有两个问题:

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

  2. 我应该在代码中写下SOMETHING。我想我必须JOIN两个表(不确定)。不知道我该怎么加入。

  3. 帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

尝试此查询

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

答案 1 :(得分: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',您将获得

| BOOKID |   BOOKNAME | BOOKREVIEW | AUTHORID | AUTHORNAME |
------------------------------------------------------------
|      1 | SQL Basics |       Cool |        1 |        Tom |

现在,如果它是'好'那么

| BOOKID |    BOOKNAME | BOOKREVIEW | AUTHORID | AUTHORNAME |
-------------------------------------------------------------
|      2 |  PHP Basics |       Good |        2 |      Jerry |
|      4 | HTML Basics |  Very Good |        3 |       Phil |

这是 SQLFiddle 演示