mysql - MySQL基于列的唯一值获取唯一行

标签 mysql

我正在尝试找出一个查询来实现以下场景的输出,下面是我的表数据

table entries

Id -> 主键表1 请求id -> FK(table2的PK)

Id -> 多对一 -> 请求 ID 列

问题: 我将从 UI 获取 SID 列值(LIST -> 可以是一个或多个值),现在假设我得到一个列表 ('121','122'),我应该得到以下结果,query result

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

  • 假设我得到的 SID 列表为 ('121') ,那么结果应如下所示,query result 2,即使还有其他条目的 SID 为 121,但它们具有相同的请求 ID,该请求 ID 存在于其他行中嗯..
  • 所以底线是我试图获取仅包含 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/

    相关文章:

    php - Mysql从XML插入字段名称为 "hyphen"

    php - 使用 preg_match 重定向到特定页面

    php - 如果右连接不返回任何行,则 mysql 设置为 null 或 0

    php - 如何使用php和Mysqli从MySQL加载图像

    php - 在不同于 Ubuntu/Windows 的 Mac 上运行 PHP & MySQL

    mysql - 两个OR语句MySQL查询

    javascript - 如何在不刷新整个页面的情况下更新 HTML 文档中的 php 变量?

    php - MySQL 空间扩展和 PHP

    mysql - SQL-仅获取每条记录的特定日期

    php - UTF8 mysql 编码数据库,但在 PHP 中不显示特殊字符