mysql在INNER JOIN之后获取特定条目

时间:2013-03-22 15:00:51

标签: mysql

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

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';

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

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

以下评论:

尝试时会发生什么:

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

你得到任何结果吗?