我正在尝试找出一个查询来实现以下场景的输出,下面是我的表数据
Id -> 主键表1 请求id -> FK(table2的PK)
Id -> 多对一 -> 请求 ID 列
问题: 我将从 UI 获取 SID 列值(LIST -> 可以是一个或多个值),现在假设我得到一个列表 ('121','122'),我应该得到以下结果,
说明: 1. 不需要 Id -> 3,4,5,6,7 的行,因为我只需要具有 SID(121,122) 组合的行
所以底线是我试图获取仅包含 SID 组合的请求 id ..如果 SID 列表有 2 个值,那么我希望具有相同请求 id 的行,同时请求 id 不应该出现在另一个中SID 除外。
过去 2 天我一直被这个查询困扰,任何帮助将不胜感激。
编辑:SQlFiddle -> http://sqlfiddle.com/#!9/98484b/1
最佳答案
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)
关于mysql - MySQL基于列的唯一值获取唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43830383/