1

我必须在三个表中使用 mysql 执行查询。

interface
---------------------
|id   |    name     |
---------------------
|1    |    inter1   | 
---------------------
|2    |    inter2   |
---------------------

inetrapp
--------------------------------------
|id   |    interid     |   appid     |
--------------------------------------
|1    |     1          |    20       |
--------------------------------------
|2    |     1          |    21       |
--------------------------------------
|3    |     2          |    22       |
--------------------------------------
|4    |     2          |    23       |
--------------------------------------

app
--------------------------------------
id    |   appid        |  appname    |
--------------------------------------
1     |     20         |    sap      |
--------------------------------------
2     |     21         |    sap1     |
--------------------------------------
3     |      22        |    wes      |
--------------------------------------
4     |      23        |    wes1     |
--------------------------------------

查询是这样的

 select  ti.id as id,  
    ti.name as name,
    GROUP_CONCAT(DISTINCT tapp.appname order by ti.id SEPARATOR ",") as applications
    from  interface ti inner join interapp tiap on ti.id = tiap.interid inner join app   as   tapp on tiap.appid = tapp.appid where tapp.appname in ("sap1");

这给了我以下结果

--------------------------------------
|id   |    name     |   applications |
--------------------------------------
|1    |    inter1   |     sap1       |
--------------------------------------

但我需要所有与 inter1 有关系的应用程序,(即)我希望得到以下结果。

--------------------------------------
|id   |    name     |   applications |
--------------------------------------
|1    |    inter1   |     sap,sap1   |
--------------------------------------

请指导我修改我的上述查询。先感谢您。

4

1 回答 1

0
SELECT  a.id,
        a.name,
        GROUP_CONCAT(DISTINCT c.appname ORDER BY a.id SEPARATOR ',') result
FROM    interface a
        INNER JOIN inetrapp b
            ON a.id = b.interid
        INNER JOIN app c
            ON b.appid = c.appid
        INNER JOIN
        (
            SELECT  DISTINCT a.interid     
            FROM    inetrapp a
                    INNER JOIN app b
                        ON a.appid = b.appid
            WHERE   b.appname IN ('sap1')
        ) d ON  a.id = d.interid
GROUP   By a.id, a.name
于 2013-10-25T07:32:36.840 回答