0

同じクエリの 2 つのバリエーションがあります。

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 つ目は、一意のキーに基づいてエントリを検索することです。ただし、空のセットが得られます。キーが存在することを確認でき、最初のクエリを実行すると、列がセットに含まれていることがわかります。

引用符の有無にかかわらず、運が悪かったので引っ張ってみました。助言がありますか?

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 に答える