5

私が使用しているクエリは次のとおりです。

SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2,3,4,5)
GROUP BY k_id;

このクエリは
1 |のようなものを返します。6
2 | 1
3 | 4
4 | 1
5 | 9

次のようなものを追加したいAND COUNT(k_id) = 1 ので、最終的には
2 |になります。1
4 | 1

ただし、グループ機能を使用すると無効になります。

どうすればこれを行うことができますか?


アップデート:

私の質問の他の部分はです。

これは削除ステートメントとして使用できますか?

何かのようなもの

DELETE FROM 
template_keyword_link tkl
LEFT JOIN keywords k
ON tkl.k_id = k.k_id
WHERE tkl.k_id 
IN(SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2)
GROUP BY k_id
HAVING k_count = 1);

私は得る

SQL 構文にエラーがあります。


フィードバックに基づいて、これを使用するように変更しました

DELETE tkl, k FROM 
template_keyword_link tkl
LEFT JOIN keywords k
ON tkl.k_id = k.k_id
WHERE tkl.k_id 
IN(SELECT k_id 
FROM template_keyword_link 
WHERE k_id IN(1,2)
GROUP BY k_id
HAVING COUNT(k_id) = 1);

しかし、今私は得ています

FROM 句で更新対象のテーブル 'tkl' を指定することはできません

4

4 に答える 4

10

WHERE節はCOUNT(*)が計算される前に適用されるため、後で適用される in が必要ですHAVING

  SELECT k_id,
         COUNT(k_id) AS k_count 
    FROM template_keyword_link 
   WHERE k_id IN (1, 2, 3, 4, 5)
GROUP BY k_id
  HAVING k_count = 1

参照: http://dev.mysql.com/doc/refman/5.1/en/select.html

**更新**:

TIAS ;-) ところで、クエリは構文的には問題ないように思えますが、条件句を指定して結合するのを忘れていませんか? mysql でエラーが表示されますか?template_keyword_linkkeywords

于 2010-09-28T01:07:25.743 に答える
3

グループ化の後havingに発生する節を探しています (節はグループ化の前にあります):where

SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2,3,4,5)
GROUP BY k_id
HAVING COUNT(k_id) = 1;
于 2010-09-28T01:08:33.700 に答える
0

これを試して

SELECT k_id, COUNT(k_id) AS k_count 
FROM template_keyword_link 
WHERE k_id IN(1,2,3,4,5)
GROUP BY k_id
HAVING ( COUNT(k_id) = 1 )
于 2010-09-28T01:14:14.333 に答える
0

ネストされたサブクエリは単純なソリューションです。

SELECT * FROM 
  (
    SELECT k_id, COUNT(k_id) AS k_count 
    FROM template_keyword_link 
    WHERE k_id IN(1,2,3,4,5)
    GROUP BY k_id 
  ) inner
WHERE inner.k_count = 1
于 2010-09-28T01:10:43.297 に答える