2017-03-06 3 views
0

Mein Tabellenname ist eine Menüliste wie unten.Meine SQL-Abfrage zum Abrufen eindeutiger Datensätze

Health_interest_id menu_id 
    ------------------- ------- 
    4      4 
    4      10 
    5      10 
    2      4 
    2      10 
    2      15 
    2      16 
    1      4 

Jetzt will ich führen nur, wenn gleiche recored nicht vor bekam ..

Zum Beispiel in der 1. Reihe wir health_id = 4, menu_id = 4 sehen. So shuld diese Zeile geholt werden,

dann in der 2. Reihe, können wir sehen, health_id = 4, die in oben Reihe bereits vorhanden ist, so überspringen diese Zeile,

Gleiche wie in 3. Reihe, menu_id = 10, war in obigem recore verfügbar, also überspringen Sie das und fahren Sie fort für alle Reihen. bedeutet überspringen, wenn das Ergebnis vorher erhalten wurde.

+1

Verwenden Sie MySQL oder MS SQL Server? Markieren Sie keine nicht betroffenen Produkte. – jarlh

+5

SQL-Tabellen repräsentieren * ungeordnete * Mengen. Es gibt keine "erste Zeile" oder "über", es sei denn, Sie geben die Reihenfolge an. Hat Ihre Tabelle eine Reihenfolge, die durch Werte in den Spalten angegeben wird? –

+0

'Selben wie in der dritten Zeile, menu_id = 10, die im obigen Recore verfügbar war. Überspringe das also und fahre für alle Zeilen fort. bedeutet überspringen, wenn das Ergebnis vorher erreicht wurde. Da Sie gesagt haben, dass die zweite Zeile übersprungen werden sollte, sollten wir davon ausgehen, dass die dritte Zeile (die zweite) übersprungen werden sollte. Bitte klären Sie Ihre Anforderungen. –

Antwort

0

Hmmm. Wenn Sie nur die unterschiedlichen Werte in den beiden Spalten möchten, können Sie tun:

select Health_interest_id as menu_id from menulist 
union 
select menu_id from menulist; 

Ist dies erreichen, was Sie wollen?

0

Sie sollten wirklich diese Art von Logik aus der Datenbank-Engine verschieben, da sie nicht kontextsensitiv ausgewählt werden kann. Sie brechen das relationale Datenkonzept. Das hier ist eine Lösung, die niemand jemals aus irgendeinem Grund verwenden sollte. Ich verdiene es, gefeuert zu werden, und habe meine Abschlüsse widerrufen und vom Stackoverflow ausgeschlossen, nur um es zu schreiben. Aber ich finde es ist spaßig anzuschauen. Wag es nicht, es zu benutzen;).

SELECT Health_interest_id, menu_id from 
(
    SELECT 
     t2.*, 
     @s:=CASE WHEN @t <> "" AND @u <> "" THEN CONCAT(@s,@t,@u) ELSE @s END, 
     @t:=CASE WHEN LOCATE(CONCAT("|", Health_interest_id, "|"),@s) = 0 THEN CONCAT(Health_interest_id, "|") else "" END as AisNew, 
     @u:=CASE WHEN LOCATE(CONCAT("|", menu_id, "|"),@s) = 0 THEN CONCAT(menu_id, "|") else "" END as BisNew 
    FROM 
     Temp.t2 as t2, 
     (Select @s:="|") as s, 
     (Select @t:="") as t, 
     (Select @u:="") as u 
) AS INNER_TAB 
WHERE AisNew <> "" And BisNew <> ""; 
+0

Wo ist der Tabellenname? –

+0

Ich habe die Tabelle Temp.t2 aufgerufen, da ich keinen Tabellennamen hatte. – gbtimmon

Verwandte Themen