基于在每个表中以不同名称出现的两个公共列来连接两个表

时间:2013-06-01 18:55:53

标签: sql

以下是表格的示例:

客户端

╔══════════╦════════════╗
║ 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也在表actions中显示为id

我想选择一个包含两列的表: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        ║
╚══════════╩════════════╝

1 个答案:

答案 0 :(得分: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查询中看到的星号*表示它将选择所有可用的列,在这种情况下,它将全部从表clients中选择。如果您只想选择特定列,请使用comma分隔不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'

要进一步了解联接,请访问以下链接:

相关问题