2016-04-07 3 views
0

これはたとえば私が持っているものです(これは異なる条件によって異なるテーブルからの選択クエリの結果です)Xを選択し、それを呼び出す:複数の行から1回のみ列の繰り返し値を選択する選択クエリを作成する方法(例の内部)

ID c2 c3 c4 

1 A de ys 

2 A rq pm 

3 B rq qs 

私は例えば、C2に一定の値を持つ行を1つだけ与えるクエリたい:

ID c2 c3 c4 

1 A de ys 

3 B rq qs 

または

ID c2 c3 c4 

2 A rq pm 

3 B rq qs 

私はデータ構造を使ってそれを行う方法を知っていますが、もっと複雑です。クエリを使用してそれを行う方法があるのだろうか?

編集:だけでなく、私はこのオープンけどで残しておきます: (それはXを問題にした場合= SELECT Responses.ID,Responses.PostID,Responses.Responding,Posts.ID,Posts.UserID,Users.ID,Users.Username FROM Responses,Posts,Users WHERE Responses.PostID =3 and Posts.ID = Responses.PostID AND Responses.Responding = Users.ID)は

SELECT(Select X).* 
FROM (Select X) as (Select X) 
JOIN (
    SELECT MIN(ID) AS ID, Users.ID 
    FROM (Select X) 
    GROUP BY Users.ID 
) AS t2 ON (Select X).ID = t2.ID 

EDIT「FROM句に構文エラー」:これは私が試したし、それがエラーを与えるものです私はクエリの方法ではなく、データ構造の方法を選択した最後。このような

答えて

1

何か:

SELECT t1.* 
FROM mytable as t1 
JOIN (
    SELECT MIN(ID) AS ID, c2 
    FROM mytable 
    GROUP BY c2 
) AS t2 ON t1.ID = t2.ID 

これは同じc2値のグループ内で最小ID値を有する行を選択します。 MAX集計関数を使用すると、2番目の結果セットを取得できます。

注:私は、IDがあなたのテーブルのPKであることを前提としています。

編集:あなたはこのようにあなたからSELECTクエリ派生テーブルを使用することができます

:私は別のテーブルの使用を理解していなかった

SELECT t1.* 
FROM (SELECT X ...) as t1 
JOIN (
    SELECT MIN(ID) AS ID, c2 
    FROM (SELECT X ...) AS t 
    GROUP BY c2 
) AS t2 ON t1.ID = t2.ID 
+0

、私はSELECTクエリを持っていると私はしたいです既に別のテーブルの用語を持つ選択クエリの製品について述べたことを実行することができます。 – user3575645

+0

@ user3575645 selectクエリを使用して派生テーブルを生成し、これを 'mytable'の代わりに使用することができます。 –

+0

どのテーブルがt1とt2を表していますか?申し訳ありませんが、愚かな質問のクエリで私の知識はほとんど、そして助けてくれてありがとう。 – user3575645