0

これが私のクエリです:

SELECT COUNT(*) FROM jos_mls AS mls 
    INNER JOIN jos_activeagents AS active ON active.AGENTUID = mls.MSTLISTBRD
    AND mls.MSTACTSTA = 'Active' OR mls.MSTACTSTA = 'Keep Showing';

テーブルはかなり大きいので、テーブル構造を示すのは難しいでしょう。

なしで count を実行するとAND mls.MSTACTSTA = 'Active' OR mls.MSTACTSTA = 'Keep Showing'、期待どおりの結果 (約 500) が得られます。しかし、これらの引数で絞り込みたい場合、500 未満になるはずの 25000 以上の結果が返されます。

構文の問題だと思いますが、同様の質問を調べても解決できませんでした。

4

3 に答える 3

0

WHERE節を使用する

SELECT COUNT(*) FROM jos_mls AS mls 
    INNER JOIN jos_activeagents AS active ON active.AGENTUID = mls.MSTLISTBRD
    WHERE mls.MSTACTSTA = 'Active' OR mls.MSTACTSTA = 'Keep Showing';
于 2013-04-03T14:51:32.133 に答える
0

ANDよりも優先されるORため、目的の出力を得るには、条件の 2 番目の部分を括弧で囲む必要があります。

SELECT COUNT(*) FROM jos_mls AS mls 
    INNER JOIN jos_activeagents AS active ON active.AGENTUID = mls.MSTLISTBRD
    AND (mls.MSTACTSTA = 'Active' OR mls.MSTACTSTA = 'Keep Showing');

予想よりも多くの行を取得している理由は、実行する実際のクエリが次のクエリと同じであるためです。

SELECT COUNT(*) FROM jos_mls AS mls 
    INNER JOIN jos_activeagents AS active ON (active.AGENTUID = mls.MSTLISTBRD
    AND mls.MSTACTSTA = 'Active') OR mls.MSTACTSTA = 'Keep Showing';
于 2013-04-03T14:57:26.457 に答える