2017-05-07 90 views
0

我试图找出一个查询,以实现以下情况下输出的唯一值抓取的唯一行,下面是我的表中的数据基于列的MySQL

table entries

标识 - >主键表1 请求ID - > FK(表2的PK)

标识 - >多对一 - >请求ID列

问题: 我会得到的SID列中的值(LIST - >能成为一个现在假设我得到一个列表('121','122'),我应该得到下面的结果,query result

说明: 1.行与Id - > 3, 4,5,6,7是不需要的,因为我只需要具有SID组合的行(121,122)

  1. 假设我得到一个SID列表('121' ),那么结果应该是在如下状态,其中query result 2在SID具有121即使有其它项,但它们具有相同的申请ID,其存在于其它行以及..

因此底线是即时消息尝试获取请求ID,它只有SID的组合。如果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)