2016-05-06 2 views
0

、それは私に混合データのセットを返す場合、ここ MySQLのチェックは値が同じであるか、私は、テーブルからレコードを取得していない

は、単純なクエリ

SELECT code_id, atb_name_id FROM `attribute_combinations` WHERE products_id =109 

それはこの

ように私のデータが返され
| code_id |atb_name_id| 
----------------------- 
| 1  | 31  | 
| 2  | 31  | 
| 3  | 31  | 
| 4  | 31  | 
| 5  | 31  | 
| 6  | 34  | 
| 7  | 34  | 
| 8  | 34  | 
| 9  | 34  | 

「atb_name_id」列の値がすべて「no」の場合、「atb_name_id」列の値がすべて「yes」である別の別名「flag」を作成します。上記の例では

"atb_name_idは" そう、出力では、次の操作を行うことができ

| code_id |atb_name_id| flag | 
------------------------------ 
| 1  | 31  | no | 
| 2  | 31  | no | 
| 3  | 31  | no | 
| 4  | 31  | no | 
| 5  | 31  | no | 
| 6  | 34  | no | 
| 7  | 34  | no | 
| 8  | 34  | no | 
| 9  | 34  | no | 
+0

使用 'INNER JOIN'と他のテーブルを更新してください。それは動作します –

答えて

1

なり31と34の両方のセットがありますよう:

SELECT code_id, atb_name_id, 
     (SELECT CASE WHEN COUNT(DISTINCT atb_name_id) > 1 THEN 'no' ELSE 'yes' END 
     FROM `attribute_combinations` ac2 
     WHERE products_id = ac.products_id) AS flag 
FROM `attribute_combinations` ac 
WHERE products_id =109 
+0

ありがとう、それは完全に働いた:) –

0

select distinct ... を使用してみてくださいそれがうまくいくことを願っています。

0

CASEの式を使用してください。

クエリ

SELECT code_id, atb_name_id, 
CASE WHEN (SELECT COUNT(DISTINCT atb_name_id) 
      FROM attribute_combinations WHERE products_id =109 
) > 1 
THEN 'no' ELSE 'yes' END AS flag 
FROM attribute_combinations 
WHERE products_id =109; 
0

は、あなたは、単に元のテーブルに参加することを選択したサブに追加情報を生成します:

SELECT 
    ac.code_id, 
    ac.atb_name_id, 
    CASE WHEN f.count = 1 THEN 'yes' 
     ELSE 'no' END AS flag 
FROM 
    attribute_combinations ac INNER JOIN 
    (SELECT 
     products_id, 
     COUNT(DISTINCT atb_name_id) AS count 
    FROM 
     attribute_combinations 
    GROUP BY 
     products_id) f ON ac.products_id = f.products_id 
WHERE 
    ac.products_id = 109 

注意してください:私はこのコードをテストしていません。アイデアを提供するだけで、バグが含まれる可能性があります。

MySQLのクエリオプティマイザは本当に常に最善ではないので、あなただけの製品に副選択の結果を制限すると、より良いパフォーマンスを得るかもしれない、あなたが興味を持っている:

SELECT 
    ac.code_id, 
    ac.atb_name_id, 
    CASE WHEN f.count = 1 THEN 'yes' 
     ELSE 'no' END AS flag 
FROM 
    attribute_combinations ac, 
    (SELECT 
     COUNT(DISTINCT atb_name_id) AS count 
    FROM 
     attribute_combinations 
    WHERE 
     products_id = 109) f 
WHERE 
    ac.products_id = 109 
関連する問題