2017-05-07 7 views
0

列の一意の値に基づいて、一意の行をフェッチすると、私のテーブルデータは下記、私は次のシナリオのための出力を達成するために、クエリを把握しようとしていますMySQLの

table entries

イドであります - >プライマリキーTABLE1 要求ID - > FK(表2のPK)

イド - >一つに多くの -

質問>リクエストID列: は、私はSIDの列の値を取得します(LIST - >することができます1つになるより多くの値)をUIから取得すると、リスト( '121'、 '122')を取得したとします。以下の結果が得られるはずです。query result

説明: 1. Id-> (121,122)

  1. SIDのリストを( '121')として取得しているとします。 )、結果は、SIDが121であるが他の行にも同じRequest Idが存在する他のエントリがあるにもかかわらず、query result 2のようになります。

したがって、最終行はIMがSIDの組み合わせのみを持つリクエストIDを取得しようとしています.SIDリストに2つの値がある場合、同じリクエストIDを持つ行を必要とし、同時にリクエストIDは別のSIDには存在しませんリスト。

私は過去2日間このクエリに悩まされています。どんな助けでも大歓迎です。

EDIT:SQlFiddle - >http://sqlfiddle.com/#!9/98484b/1

+1

それは、あなたの質問にあなたのデータの画像を置くことは本当に役に立たないです。どうして?私たちは回答者が時々http://sqlfiddle.comを使って問題を再現しようとしているからです。しかし、データをもう一度入力する必要がある場合は試行しません。あなたの質問を編集してください。答えを得るための最良の方法は、自分でsqlfiddleを作成することです。 –

+0

私はフィドルリンクで私の質問を更新しました。 – user2159399

答えて

0
MariaDB [sandbox]> CREATE TABLE T(ID INT,REQUESTID INT, SID INT); 
Query OK, 0 rows affected (0.28 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> INSERT INTO T VALUES 
    -> (1,1,121),(2,1,122), 
    -> (3,2,121),(4,3,123), 
    -> (5,3,121),(6,3,125), 
    -> (7,3,126),(8,4,121), 
    -> (9,4,122); 
Query OK, 9 rows affected (0.06 sec) 
Records: 9 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> 
MariaDB [sandbox]> SELECT T.ID,S.* FROM 
    -> (
    -> SELECT REQUESTID ,GROUP_CONCAT(ID),GROUP_CONCAT(SID ORDER BY SID) SID 
    -> FROM T 
    -> GROUP BY REQUESTID 
    ->) S 
    -> JOIN T ON T.REQUESTID = S.REQUESTID 
    -> WHERE S.SID = '121,122'; 
+------+-----------+------------------+---------+ 
| ID | REQUESTID | GROUP_CONCAT(ID) | SID  | 
+------+-----------+------------------+---------+ 
| 1 |   1 | 1,2    | 121,122 | 
| 2 |   1 | 1,2    | 121,122 | 
| 8 |   4 | 8,9    | 121,122 | 
| 9 |   4 | 8,9    | 121,122 | 
+------+-----------+------------------+---------+ 
4 rows in set (0.02 sec) 

MariaDB [sandbox]> 
MariaDB [sandbox]> SELECT T.ID,S.* FROM 
    -> (
    -> SELECT REQUESTID ,GROUP_CONCAT(ID),GROUP_CONCAT(SID ORDER BY SID) SID 
    -> FROM T 
    -> GROUP BY REQUESTID 
    ->) S 
    -> JOIN T ON T.REQUESTID = S.REQUESTID 
    -> WHERE S.SID = '121'; 
+------+-----------+------------------+------+ 
| ID | REQUESTID | GROUP_CONCAT(ID) | SID | 
+------+-----------+------------------+------+ 
| 3 |   2 | 3    | 121 | 
+------+-----------+------------------+------+ 
1 row in set (0.02 sec) 
関連する問題