簡體   English   中英

根據MySQL中另一個表中的值從表中選擇

[英]Select from table based on values in another table in MySQL

我在數據庫中有兩個簡單的表

文件

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

我想選擇所有包含關鍵字“ turtles”的論文。 也就是說,它將返回

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 * 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對應的行。 我不想在標題中找到關鍵字。

我們可以嘗試為每個論文標題搜索整個關鍵字集,以尋找匹配項。 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[[:>:]]';

簡單加入(內部):

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

我真的很喜歡蒂姆的答案

這是我自己的嘗試

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 ,' %')
  ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM