0

我有相同查询的两种变体:

SELECT * FROM jos_mls AS mls
    INNER JOIN jos_activeagents AS active ON mls.MSTLISTBRD = active.AGENTUID
    INNER JOIN jos_agents AS agents ON active.AGENTUID = agents.AGTBRDIDMM
    INNER JOIN jos_agencies AS firm on agents.AGTFRMID = firm.OFFFRMID
    AND mls.MSTRECAPDT >= ADDTIME(CURRENT_TIMESTAMP(), '04:29:00.000000');

和...

SELECT * FROM jos_mls AS mls
    INNER JOIN jos_activeagents AS active ON mls.MSTLISTBRD = active.AGENTUID
    INNER JOIN jos_agents AS agents ON active.AGENTUID = agents.AGTBRDIDMM
    INNER JOIN jos_agencies AS firm on agents.AGTFRMID = firm.OFFFRMID
    AND mls.MSTMLSNO = '4115762';

第一个工作正常,没有问题。第二个是根据唯一键查找条目。但是,它给出了一个空集。我可以验证密钥是否存在,当我运行第一个查询时,我知道该列已包含在集合中。

我试过用引号和不带引号来拉它,但没有运气。有什么建议么?

4

2 回答 2

1

首先,我怀疑你的意思是说WHERE,不是AND;-)

SELECT * FROM jos_mls AS mls

INNER JOIN jos_activeagents AS active ON mls.MSTLISTBRD = active.AGENTUID 
INNER JOIN jos_agents AS agents ON active.AGENTUID = agents.AGTBRDIDMM
INNER JOIN jos_agencies AS firm on agents.AGTFRMID = firm.OFFFRMID
WHERE mls.MSTMLSNO = 4115762

但是您所写的是“有效的”(至少在某些 DBMS 中,我认为在 mysql 中还可以)。但就您所追求的结果而言,可能不是“正确的”。

(我对 mySql 不是特别熟悉,但相信某些 DBMS 的ON子句中的表达式与当时正在编辑的表无关JOIN。但到目前为止我对 mySql 的经验是,这在语法上很好)

在某些情况下,即使它“有效”(即它运行并产生一些没有错误的结果),该子句的位置也会影响结果集(我认为)和查询优化(我相当当然)。这些事情中的一种或两种可能在这里发生?

无论它是否“解决”了问题,恕我直言,您应该将您的AND mls...条款移至适当的ON条款,而不是出于可读性/可维护性的其他原因。

SELECT * FROM jos_mls AS mls

    INNER JOIN jos_activeagents AS active 
    ON mls.MSTLISTBRD = active.AGENTUID 
    AND mls.MSTMLSNO = 4115762

    INNER JOIN jos_agents AS agents ON active.AGENTUID = agents.AGTBRDIDMM
    INNER JOIN jos_agencies AS firm on agents.AGTFRMID = firm.OFFFRMID;
于 2013-03-22T15:12:58.187 回答
0

编辑以下评论:

尝试时会发生什么:

SELECT * FROM jos_mls AS mls WHERE mls.MSTMLSNO = 4115762;

你有什么结果吗?

于 2013-03-22T15:06:18.270 回答