2017-03-06 3 views
0

私のテーブル名は、以下のようにメニューリストです。私のユニークなレコードを取得するSQLクエリ

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

今、私は同じrecoredは前に持っていない場合にのみ発生します。..

例えば1行目に、私たちはhealth_id = 4、menu_id = 4を見ることができます。その結果、行は

は次に2行目では、我々はmenu_id、既に上の行に存在するhealth_id = 4を参照して、その結果行をスキップし、3行目のよう

同じことができ、フェッチさshuld = 10れます上記のrecoreで利用可能だったので、スキップしてすべての行を続行します。結果が前に得られた場合はスキップすることを意味します。

+1

MySQLまたはMS SQL Serverを使用していますか?関与していない製品にはタグを付けないでください。 – jarlh

+5

SQLテーブルは、*順序付けられていない*セットを表します。順序を指定しない限り、「最初の行」または「上の」などはありません。あなたのテーブルには列内の値で指定された順序がありますか? –

+0

'3番目の行と同じですが、上記のrecoreで利用可能だったmenu_id = 10なので、それをスキップしてすべての行を続けます。結果が前に得られた場合はスキップすることを意味します。二番目の行がスキップされるべきだと言ったので、三番目の行(つまり二番目の行)はスキップされるべきであると私たちは考えています。要件を明確にしてください。 –

答えて

0

Hmmm。 2つの列に異なる値が必要な場合は、次の操作を実行できます。

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

これで、目的が達成されますか?

0

コンテキストの選択を行うように設計されていないため、この種のロジックを実際にデータベースエンジンから移動する必要があります。あなたはリレーショナルデータの概念を破っています。それはここにあると言われていますが、これまでどんな理由でも誰も使用すべきではない解決策です。私は解雇されなければなりません。しかし、私はそれを見て楽しいと思う。あなたはそれを使用することはできません;)。

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

テーブル名はどこですか? –

+0

私は行くテーブル名がないので、IveはテーブルTemp.t2を呼び出しました。 – gbtimmon

関連する問題