MYSQL - 想要选择一些行,有时该字段不存在,但我想在该字段存在时使用 WHERE

标签 mysql sql left-join

好吧,这很难解释......

我有以下表格:

table : words
table: word_progress
table: word_set

foreign keys:
words.id = word_set.word_id
word_progress.word_id = words.id
word_progress.user_id = users.id

基本上一个词在一个词集中。 word_progress(它对某个单词进行评分)与 user_id 和 word_id 相关。

问题是有时 word_progress 中没有 user_id 和 word_id 的条目。但是当它存在时,我希望能够在查询的 WHERE 部分使用 word_progress。但如果它不存在,我不会。我目前的工作是在运行语句之前,我执行“将 IGNORE IF EXISTS 插入 work_progress (word_id,user_id) values (?,?)”以确保它在那里

我有这个问题

select 
words.* , 
word_progress.progress from words

left join word_progress on word_progress.word_id = words.id
left join word_set on word_set.id = words.word_set_id        

where word_set.id = ?  and word_progress.user_id = ?

但是...问题是有时没有那个词的 word_progress 条目

我该怎么做?

最佳答案

你已经左连接了,所以当没有数据可用时,你只会得到 null 作为你的 word_progress 字段的值。像这样检查一下:

...
and
  (
    word_progress.user_id is null
  or
    word_progress.user_id = ?
  )

另一种方法是将用户限制直接添加到 join-criteria,如下所示:

...
left join word_progress
  on word_progress.word_id = words.id
  and word_progress.user_id = ?
...

并从 where 部分删除该条件。

请注意,在这两种情况下,您都必须在稍后的代码中正确处理 nullprogress 情况。

关于MYSQL - 想要选择一些行,有时该字段不存在,但我想在该字段存在时使用 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468384/

相关文章:

php - 如何使用 session 数组从数据库选择中提取项目?

PHP - 将数据插入数据库

mysql - MySQL 快照与 SQL 转储的优缺点

sql - PostgreSQL - 添加 CONSTRAINT UNIQUE 并且不验证现有数据

mysql - sql自连接和多对多关系

php - "Lost connection to MySQL server"错误,但实际发生后1小时?

sql - "With recompile"是否重新编译存储过程中的所有查询?

MySQL 左外连接问题

MySQL LEFT JOIN 语法错误

SQL 左外连接不提供完整表