Mysql 选择2个表是否不返回结果?

Mysql 选择2个表是否不返回结果?,mysql,sql,Mysql,Sql,我有两张桌子: 表“annonce”(房地产广告): 表“免费天数”(所有广告的免费天数): 我想选择所有在开始日期和结束日期之间只有空闲天数的可用广告,我必须在该日期之间的每一天进行检查 请求: SELECT DISTINCT `annonce`.`idAnnonce`, `annonce`.`reference` FROM `annonce`, `freeDays` WHERE `annonce`.`idAnnonc

我有两张桌子:

表“annonce”(房地产广告):

表“免费天数”(所有广告的免费天数):

我想选择所有在开始日期和结束日期之间只有空闲天数的可用广告,我必须在该日期之间的每一天进行检查

请求:

    SELECT DISTINCT
        `annonce`.`idAnnonce`, `annonce`.`reference` 
    FROM
        `annonce`, `freeDays` 
    WHERE
        `annonce`.`idAnnonce` = `freeDays`.`idAnnonce`
    AND
        `freeDays`.`date` = '2015-06-06'
    AND
        `freeDays`.`date` = '2015-06-07'

不返回结果。我的错误在哪里?

不可能两个日期都相等

SELECT DISTINCT a.idAnnonce, a.reference 
FROM annonce a 
INNER JOIN freeDays f ON a.idAnnonce = f.idAnnonce
WHERE f.date BETWEEN '2015-06-06' AND '2015-06-07'

马特所说的是正确的。您也可以选择这样做:

SELECT DISTINCT a.idAnnonce, a.reference 
FROM annonce a 
INNER JOIN freeDays f ON a.idAnnonce = f.idAnnonce
WHERE f.date IN('2015-06-06','2015-06-07')
或者像这样:

SELECT DISTINCT a.idAnnonce, a.reference 
FROM annonce a 
INNER JOIN freeDays f ON a.idAnnonce = f.idAnnonce
WHERE f.date ='2015-06-06' OR f.date ='2015-06-07'

这将为您提供与在
之间使用
相同的结果,您的WHERE子句正在请求不可能

您请求的行中的“空闲日”。“日期”值同时为2015-06-06和2015-06-07

AND
    freeDays.date = '2015-06-06'
AND
    freeDays.date = '2015-06-07'
您需要在以下两者之间使用:

freeDays.date BETWEEN '2015-06-06' AND '2015-06-07'

AND
    freeDays.date = '2015-06-06'
OR
    freeDays.date = '2015-06-07'

…和('2015-06-06','2015-06-07')中的
自由日
日期
绝对有所有可能的解决方案,我只在两者之间使用,因为他们在问题中指出“开始日期和结束日期之间只有自由日”这让我相信这可能需要一个范围,而不是具体的dates@Matt:仅针对OP存在的问题提供备选方案。你的答案是首选的OneHank,但如果我在两个日期之间有一个“洞”:2015-06-06;2015-06-07 ; 2015-06-09. 广告会被选中吗?乌云,操纵错误:如果我在两个日期之间有一个“洞”:2015-06-06;2015-06-07 ; 2015-06-09. 将选择广告?@greg030然后您将使用第一个和最后一个日期,例如2015-06-06和2015-06-09之间的
是的,我理解。但在这个山谷里,一天不见了。所以我不希望这一次被选中。也许我应该提出新的问题,更具体一些。非常感谢您的帮助:)
AND
    freeDays.date = '2015-06-06'
AND
    freeDays.date = '2015-06-07'
freeDays.date BETWEEN '2015-06-06' AND '2015-06-07'

AND
    freeDays.date = '2015-06-06'
OR
    freeDays.date = '2015-06-07'