根据mysql中另一个表中的值从表中选择

d8tt03nd  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(431)

我在数据库中有两个简单的表
文件

ID Title                              Author 
1  A study of turtles                 Mary
2  Dietary habits of ducks            Kate
3  Similarities of turtles and cats   Fred

关键词

ID Keyword                            
1  turtles                 
2  ducks          
3  turtles
3  cats

我想选择所有的报纸有关键字“海龟”。也就是说,它会回来

ID Title                              Author 
1  A study of turtles                 Mary
3  Similarities of turtles and cats   Fred

或者

ID Title                              Author   Keyword
1  A study of turtles                 Mary     turtles
3  Similarities of turtles and cats   Fred     turtles

我不关心关键字标题是否包括在内。
我想我需要使用一个别名来使用select和inner连接,但是语法不对。
我试过了

select * from (select papers.*, keywords.* from papers inner join keywords on papers.id = keywords.id) where keyword = "turtles";

这就产生了错误 Every derived table must have its own alias 我试着了解mysql中的错误“每个派生表都必须有自己的别名”是什么?

select * from (select papers.*, keywords.* from 
    (papers inner join keywords on papers.id = keywords.id) as T) 
    as T) 
    where keyword = "turtles";

返回语法错误。
我知道有很多类似的问题,但我是mysql新手,对这些问题/例子感到困惑。
编辑:说明我想从表关键字(本例中为1和3)中返回与关键字“turtle”匹配的id,然后从papers表中选择与这些id对应的行。我不想在标题中找到关键字。

m3eecexj

m3eecexj1#

我们可以尝试搜索,每一篇论文的标题,整个关键字集,寻找一个匹配。这个 REGEXP 接线员在这里很有帮助。特别是,我们正在寻找匹配 \bkeyword\b 反对报纸标题上的任何地方。

SELECT p.*
FROM papers p
WHERE EXISTS (SELECT 1 FROM keywords k
              WHERE p.title REGEXP CONCAT('[[:<:]]', k.keyword, '[[:>:]]'));

演示

编辑:
如果你只想搜索一个已知的关键字的论文标题,例如。 turtles ,然后使用此简化:

SELECT *
FROM papers
WHERE title REGEXP '[[:<:]]turtles[[:>:]]';
tjjdgumg

tjjdgumg2#

简单连接(内部):

SELECT *
FROM keywords k
JOIN papers p USING (id)
WHERE k.keyword='turtles'
wwwo4jvm

wwwo4jvm3#

我真的很喜欢蒂姆的回答
这是我自己的尝试

SELECT
  *
 FROM
   papers p
   INNER JOIN keywords k ON p.`Title`  LIKE CONCAT('%', k.keyword ,'%')
  ;

sqlfiddle公司
正如tim对这个答案的评论,它将带来子字符串以及一个完整的单词匹配为了解决这个问题,需要在%参数中添加空格

SELECT
  *
 FROM
   papers p
   INNER JOIN keywords k ON p.`Title`  LIKE CONCAT('% ', k.keyword ,' %')
  ;

相关问题