2017-02-02 4 views
0

2つのテーブル(サイクルと結合されたサイクル)があります。 "サイクル"には2つのフィールドが必要です(ユーザーIDとサイクルID)。また、 "merged_cycles"には2つのターゲットフィールド(cycleid1とcycleid2)があります。私は、 "cycles"に複数のレコードを持つすべてのcycles.useridを知る必要があります。一致するレコードの対応するcycles.cycleidが、merged-cycles.cycleid1またはmerged_cyclesのいずれかで "merged_cycles"のレコードに表示されない限り.cycleid2。私は現在、2つの異なるクエリを使用して作業しているが、それは1つで行うことができれば興味があった。これまでに試したことは次のとおりです。は2つのクエリを実行する必要があります。COUNT(*)の条件を持つMySQLテーブル

SELECT cycles.cycleid, cycles.userid, cycles.COUNT(*), 
     merged_cycles.cycleid1, merged_cycles.cycleid2 
FROM cycles,merged_cycles 
WHERE merged_cycles.cycleid1 != cycles.cycleid && merged_cycles.cycleid2 != cycles.cycleid 
GROUP BY cycles.userid 
HAVING cycles.count(*) > 1 

ありがとうございました!

+2

は* * 'FROM'句にカンマを使用しないでください。 *常に*適切で明示的な 'JOIN'構文を使用します。 –

+0

使用したクエリの例、入力データと期待される結果を含めてください。あなたの説明から何をしようとしているのかを理解することはかなり難しいです。この形式でチームリードの要件を取得しますか? –

答えて

1

私はこれが何をしたいんだと思う:

SELECT c.cycleid 
FROM cycles c 
WHERE NOT EXISTS (SELECT 1 
        FROM merged_cycles mc 
        WHERE c.cycleid IN (mc.cycleid1, mc.cycleid2) 
       ) 
GROUP BY c.userid 
HAVING count(*) > 1; 
+0

サブクエリ内のUNION ALLまたは2つのNOT EXISTS条件がおそらくより高速になります。 –

+0

'UNION ALL'はおそらくもっと高速ではありません。 2つの列のそれぞれに索引がある場合、2つの「存在しない」となります。 –

+0

ありがとう、これは私のためには機能しませんでしたが、私はそれを通過しています。私はそれを2つの異なるクエリで動作させて、私はこの機能をさらに拡張する必要があるかもしれないので、私は今この「単一クエリ」の事をバックバーナーします。あなたのお時間をありがとうございます! – Rich701

関連する問題