2017-05-07 1 views
0

열의 고유 한 값을 기반으로 고유 행을 가져 오기 나의 테이블 데이터아래, 나는 다음과 같은 시나리오에 대한 출력을 달성하기 위해 쿼리를 알아 내기 위해 노력하고 MySQL을

table entries

이드 - > 기본 키 표 요청 ID -> FK (표 2의 PK)

아이디 -> 하나에 많은 -

질문> 요청 ID 열 : 내가 SID 열 값을 얻는 것 (LIST -> 수 하나가 되라. 는 UI에서 R 이상의 값)가, 지금은 아래의 결과를 얻는해야한다, 나는 목록 ('121', '122')를 얻고 가정 query result

설명 : 아이디와 1 행 -> 3, (121,122)

  1. SID의 목록을 ('121'을 (를) 가져 오는 것으로 가정합니다.), 결과는 다음과 같아야합니다 query result 2 SID가 121 인 다른 항목이 있지만 다른 요청에도 동일한 행이 있습니다.

그래서 최종선 메신저는 SID 조합만을 가진 요청 ID를 얻으려고합니다 .. SID 목록에 2 개의 값이있는 경우 동일한 요청 ID를 가진 행을 원할 때 동시에 요청 ID는 다른 SID에 존재하지 않아야합니다 그 목록.

나는 지난 2 일 동안이 쿼리를 사용하고 있는데, 어떤 도움을 주시면 대단히 감사하겠습니다.

편집 : 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) 
관련 문제