记录显示在查询结果上,即使不应该

时间:2014-11-27 14:40:18

标签: mysql

我需要在我的数据库上查询一些表,为此我必须使用一些嵌套查询。这是一个效果不佳的人:

SELECT * 
FROM inserzioni
WHERE inserzioni.idComune
IN (

    SELECT tcomuni.IDCOMUNE
    FROM tcomuni, tprovince
    WHERE tcomuni.IDPROVINCIA
    IN (

        SELECT tprovince.IDPROVINCIA
        FROM tprovince
        WHERE tprovince.IDREGIONE =  '20'
    )
)
AND inserzioni.idProdAcq
IN (

    SELECT prodacq.idPa
    FROM prodacq
    WHERE DATEDIFF( NOW( ) , prodacq.dataInizio ) < prodacq.durata
    AND prodacq.f_attivo =1
)
GROUP BY inserzioni.idInserzione

问题出现在最后一个巢中。在结果表中,我看到一条记录不应该在那里,因为此记录的idProdAcq不再在prodacq表中。有什么我想念的吗?

1 个答案:

答案 0 :(得分:0)

您使用INNER JOIN

将发布的查询简化为以下内容
SELECT i.* 
FROM inserzioni i
JOIN tcomuni t ON i.idComune = t.IDCOMUNE
JOIN tprovince tp ON t.IDPROVINCIA = tp.IDPROVINCIA
AND tp.IDREGIONE = '20'
JOIN prodacq p ON i.idProdAcq = p.idPa
AND DATEDIFF( NOW( ) , p.dataInizio ) < p.durata
    AND p.f_attivo =1
GROUP BY i.idInserzione;