2017-06-12 17 views
0

私はデータベースの初心者です。私の問題は、私は英語で良いことではないよので、言葉で説明するのは難しいので、ここで私はどうなるのかです:MySQLのIN(または)の代わりに構文とIN(各)

SELECT DISTINCT(link) 
FROM foo 
WHERE 
(
    foo.name IN('bar1' AND 'bar2') 
) 
AND 
(
    foo.text IN('bar3' AND 'bar4' AND ...) 
) 
AND 
(
    foo.desc = 'bar' 
) 
AND (...) etc.. 
LIMIT 100 

たこのソリューションは作業と思われる場合は偉大ではなく、複数の私の場合はWHERE文( syntaxe)がそれぞれ括弧内に持つGROUPBY +を持つことができないとき:

foo.name IN('bar1', 'bar2') // len = 2 
GROUP BY link 
HAVING COUNT(foo.name) = 2 // len 

はので、ここで理解するのは難しいかもしれテーブルの簡単な例です:

| id | link | name | 
| -- | ---- | ---- | 
| 01 | HG.C | bar1 | 
| 02 | IJ.N | bar2 | 
| 03 | HG.C | bar2 | 
| 03 | SZ.W | bar3 | 

SELECT DISTINCT(link) 
FROM foo 
WHERE 
(
    foo.name IN('bar1' AND 'bar2') 
) 

それはretu必要がありますrn:HG.C

私はまだ失敗しているので、私はまだ方法を探しています...私の脳は(まだ)SQL用にフォーマットされていないと思います。誰かが私を助けることができるなら、とても素敵でしょう。

+0

脇役: 'DISTINCT'は関数ではありません。あなたのカッコは混乱するだけです。削除する必要があります。 (しかし、とにかくここでは 'DISTINCT'は望んでいませんが、代わりに' GROUP BY'で集計してください) –

答えて

0

...でグループを使用したが、インクルードは、文全体のためのものであることができます。しかし、あなたは特定の基準に合ったリンクを表示したいだけです。結果をフィルタリングするためにHAVING句を使用します。

SELECT link 
FROM foo 
GROUP BY link 
HAVING SUM(name = 'bar1') > 0 
    AND SUM(name = 'bar2') > 0 
    AND SUM(text = 'bar3') > 0 
    AND SUM(text = 'bar4') > 0 
    AND SUM(desc = 'bar') > 0; 

これは、クエリをあなたの名前=「BAR1」を持つレコードを持っているリンクを示しており、また、名前=「BAR2」とも...

を記録MySQLのtrue = 1、false = 0を利用しています。したがって、SUM(name = 'bar1')では、発生をカウントします。

あなたも、組み合わせた基準を求めることができ、必要に応じて:

AND SUM(name = 'bar2' AND text = 'bar4') > 0 

のみ名「BAR1」または「BAR2を持つレコードを見ようにしてあなたはこれをスピードアップするためにWHERE句を(追加することができます'と' bar3 'や' bar4 'などのテキスト)。

+0

sooooありがとう、これは私の一日を節約しています。 本当に大きなデータベースでこれを行うので、これはあまり長くしないことを願っていますが、WHERE節を試してみます。 – Thomas

0

あなたはあなたがlinkごとに1つの結果行を取得集約、探している

select link 
    from foo 
    where foo.name IN('bar1' AND 'bar2') 
    group by foo.link 
    having count(foo.link)>2 
関連する問題