2016-05-06 9 views
0

Ich Abrufen Datensätze aus einer Tabelle und es gibt mir eine Reihe von gemischten DatenMysql prüfen, ob Werte gleich sind oder nicht

hier ist eine einfache Abfrage

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

Es gibt mir Daten wie diese

| code_id |atb_name_id| 
----------------------- 
| 1  | 31  | 
| 2  | 31  | 
| 3  | 31  | 
| 4  | 31  | 
| 5  | 31  | 
| 6  | 34  | 
| 7  | 34  | 
| 8  | 34  | 
| 9  | 34  | 

Ich möchte einen anderen Alias ​​"Flag" machen, der alle Werte mit "ja" gefüllt hat, wenn die Spalte "atb_name_id" alle die gleichen Werte hat, ansonsten mit "no" gefüllt.

Im obigen Beispiel als "atb_name_id" hat sowohl Satz von 31 und 34, so dass die Ausgabe

| 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

Verwenden 'INNER JOIN' und Update der anderen Tabelle .. es wird funktionieren –

Antwort

1

Sie können Sie wie folgt sein:

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

Danke Mann, es hat perfekt funktioniert :) –

0

Try select distinct ... verwenden Ich hoffe, es wird gut funktionieren.

0

Verwenden Sie CASE Ausdruck.

Abfrage

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

Produzieren der zusätzliche Informationen in einem Unter wählen, dass Sie einfach zu der ursprünglichen Tabelle beitreten:

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 

Vorsicht: Ich habe diesen Code nicht getestet haben. Es ist nur hier, um Ihnen eine Idee zu geben und könnte Fehler enthalten.

Da die MySQL-Abfrage-Optimierer nicht wirklich immer das Beste ist, können Sie eine bessere Leistung mit dem Ergebnis der subselect nur auf die Produkte zu beschränken, sind Sie interessiert:

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