1

这是表格的示例:

客户

╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc      ║ xex        ║
║ def      ║ tet        ║
╚══════════╩════════════╝ 

团队

╔════════╦════════════╗
║ ACT_ID ║ GROUP_NAME ║
╠════════╬════════════╣
║     44 ║ xex        ║
║     32 ║ tet        ║
╚════════╩════════════╝

行动

╔════╦════════════╗
║ ID ║   STATE    ║
╠════╬════════════╣
║ 44 ║ complete   ║
║ 58 ║ incomplete ║
╚════╩════════════╝  

请注意,act_id在表teams中也存在于表actionsid

我想选择一个有两列的表:group_idgroup_name,其中每个group_name都有act_id一个完整 state的.

我正在做类似的事情:

SELECT group_id AND group_name 
FROM clients
WHERE group_name IN (SELECT group_name  
                     FROM teams, actions
                     WHERE teams.act_id = actions.id 
                       AND actions.state IS complete)

这个对吗 ?

我也想到了类似的东西

SELECT group_id AND group_name 
FROM clients
WHERE group_name IN (SELECT group_name 
                     FROM teams
                     WHERE act_id IN (SELECT id 
                                      FROM actions
                                      WHERE teams.act_id = actions.id. 
                                        AND state IS complete))

以上是否正确?

我要找的桌子显然是这张:

╔══════════╦════════════╗
║ GROUP_ID ║ GROUP_NAME ║
╠══════════╬════════════╣
║ abc      ║ xex        ║
╚══════════╩════════════╝
4

1 回答 1

3
SELECT  a.* 
FROM    clients a
        INNER JOIN teams b
            ON a.group_name = b.group_name
        INNER JOIN actions c
            ON b.act_ID = c.id
WHERE   c.state = 'complete'

您在 sql 查询中看到的星号*表示它将选择所有可用的列,在这种情况下,它将全部从 table 中选择clients。如果您只想选择特定列,请使用commato 分隔 not AND。例如,

SELECT  a.GROUP_ID, a.GROUP_NAME
FROM    clients a
        INNER JOIN teams b
            ON a.group_name = b.group_name
        INNER JOIN actions c
            ON b.act_ID = c.id
WHERE   c.state = 'complete'

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-06-01T18:59:04.550 回答