MySQL:当连接表有多个结果时,为什么此选择查询找不到行?

标签 mysql join

标题可能比较困惑,不知道该怎么写。这就是我需要做的。我有两个表,cronjobs 和 cronjob_seeds。我需要在将 cronjob 添加到数据库之前查看它是否存在。

考虑这些表格:

定时任务:

-id-   -callback_model-         -callback_method-
1       movie_suggestion_model    fetch_similar_movies

cronjob_seeds:

-cronjob_id-   -seed-
1               seed1
1               seed2

在添加新的 cronjob 之前,我需要查看数据库中是否存在完全相同的 cronjob。我编写了以下查询,但如果 cronjob 有多个种子,则该查询不起作用。如果它只有一个种子,那么效果很好,但每次 cronjob 有多个种子时,它都不会返回任何内容。

SELECT `id`
FROM (`cronjobs`)
INNER JOIN `cronjob_seeds` ON `cronjob_seeds`.`cronjob_id` = `cronjobs`.`id`
WHERE `cronjobs`.`callback_model` = 'movie_suggestion_model'
    AND `cronjobs`.`callback_method` = 'fetch_similar_movies'
    AND `cronjob_seeds`.`seed` = '1'
    AND `cronjob_seeds`.`seed` = 10

我错过了什么吗?我应该使用其他类型的连接吗?

而且,题外话,但是种子是回调方法的一个参数,我只是命名它有点奇怪。

最佳答案

您应该使用 IN 子句

将您的查询更改为:

SELECT `id`
FROM (`cronjobs`)
INNER JOIN `cronjob_seeds` ON `cronjob_seeds`.`cronjob_id` = `cronjobs`.`id`
WHERE `cronjobs`.`callback_model` = 'movie_suggestion_model'
    AND `cronjobs`.`callback_method` = 'fetch_similar_movies'
    AND `cronjob_seeds`.`seed` IN ('seed1', 'seed2')

关于MySQL:当连接表有多个结果时,为什么此选择查询找不到行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884372/

相关文章:

python - cherrypy mvc 与 mysql 问题

MySQL 或 Laravel Eloquent - 排序依据

sql - 父子关系 : multiple tables vs. 自连接

php - 计算两个连续日期之间的最大天数

PHP foreach 用户脚本似乎使 apache 挂起

mysql - 部署后 spring : Error creating bean , 管道损坏

MySQL 连接查询

windows - 如何在批处理文件中组合数字和字符串

php - Doctrine DBAL - SELECT 连接两个表,在结果的键中带有前缀

mysql - Laravel 5.1 DBQuery 连接