好吧,这很难解释......
我有以下表格:
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
部分删除该条件。
请注意,在这两种情况下,您都必须在稍后的代码中正确处理 null
的 progress
情况。
关于MYSQL - 想要选择一些行,有时该字段不存在,但我想在该字段存在时使用 WHERE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10468384/