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

时间:2012-10-14 16:49:07

标签: mysql join

标题可能令人困惑,不太清楚怎么说。这就是我需要做的。我有两张桌子,cronjobs和cronjob_seeds。在将数据库添加到数据库之前,我需要查看是否存在cronjob。

考虑以下表格:

cronjobs:

-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

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

而且,关于主题,但种子是回调方法的参数,我只是把它命名有点奇怪。

3 个答案:

答案 0 :(得分:1)

您应该使用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')

答案 1 :(得分:0)

仅检查cron条目是否存在,您不需要加入,除非您需要检查它是否存在且具有特定种子。要仅检查是否存在cron条目,您需要执行以下操作:

SELECT `id`
FROM `cronjobs`
WHERE `cronjobs`.`callback_model` = 'movie_suggestion_model'
    AND `cronjobs`.`callback_method` = 'fetch_similar_movies'

答案 2 :(得分:0)

即使_cronjob_seeds_只有一行,查询如何返回结果。导致最后两个AND标准相互冲突。你应该修改为:

 AND `cronjob_seeds`.`seed` BETWEEN  '1' AND '10'

您是否也在质疑cronjob_seed或cronjob中记录的存在?您的查询参数似乎不清楚。您是否正在尝试检查是否存在具有特定种子的特定cronjob?提示:尝试用人类语言编写查询而不是sql