首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >搜索左联接空

搜索左联接空
EN

Stack Overflow用户
提问于 2011-08-09 23:56:52
回答 2查看 215关注 0票数 0

我有一个用于mysql的sql语句,它将一个字符串与两个数据库中的单词相匹配。我想排除另一个表中的结果,但是当我添加conv_progress的左联接时,它会中断语句。有人知道如何排除另一个表中的条目吗?

Works

代码语言:javascript
复制
SELECT video.*,
  MATCH(video.title) AGAINST(? IN BOOLEAN MODE) as cscore, 
  MATCH(tags.name) AGAINST(? IN BOOLEAN MODE) as htscore
FROM video
LEFT JOIN tags ON video.vid_id=tags.vid_id
null
WHERE
  MATCH(video.title) AGAINST(? IN BOOLEAN MODE) OR
  MATCH(tags.name) AGAINST(? IN BOOLEAN MODE) GROUP BY video.vid_id
ORDER BY cscore DESC LIMIT ?, ?

断裂

代码语言:javascript
复制
SELECT video.*,
  MATCH(video.title) AGAINST(? IN BOOLEAN MODE) as cscore, 
  MATCH(tags.name) AGAINST(? IN BOOLEAN MODE) as htscore
FROM video
LEFT JOIN tags ON video.vid_id=tags.vid_id
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id where conv_progress.vid_id is null
WHERE
  MATCH(video.title) AGAINST(? IN BOOLEAN MODE) OR
  MATCH(tags.name) AGAINST(? IN BOOLEAN MODE) GROUP BY video.vid_id
ORDER BY cscore DESC LIMIT ?, ?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-10 00:00:27

conv_progress.vid_id is null移到WHERE子句中:

代码语言:javascript
复制
SELECT video.*,
  MATCH(video.title) AGAINST(? IN BOOLEAN MODE) as cscore, 
  MATCH(tags.name) AGAINST(? IN BOOLEAN MODE) as htscore
FROM video
LEFT JOIN tags ON video.vid_id=tags.vid_id
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id 
WHERE
  (
    MATCH(video.title) AGAINST(? IN BOOLEAN MODE) OR
    MATCH(tags.name) AGAINST(? IN BOOLEAN MODE)
  ) 
  AND conv_progress.vid_id is null
GROUP BY video.vid_id
ORDER BY cscore DESC LIMIT ?, ?
票数 1
EN

Stack Overflow用户

发布于 2011-08-10 00:04:06

您也可以使用NOT EXISTS代替联接。

代码语言:javascript
复制
SELECT video.*,
  MATCH(video.title) AGAINST(? IN BOOLEAN MODE) as cscore, 
  MATCH(tags.name) AGAINST(? IN BOOLEAN MODE) as htscore
FROM video
LEFT JOIN tags ON video.vid_id=tags.vid_id
null
WHERE
  (
  MATCH(video.title) AGAINST(? IN BOOLEAN MODE) OR
  MATCH(tags.name) AGAINST(? IN BOOLEAN MODE)
  )AND(NOT EXISTS(SELECT 1 FROM conv_progress WHERE video.vid_id=conv_progress.vid_id))
 GROUP BY video.vid_id
ORDER BY cscore DESC LIMIT ?, ?
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7004440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档