sql查询与2表使用连接

时间:2014-07-15 17:28:46

标签: sql

很抱歉这样一个基本问题,但我的SQL很弱。我有2张桌子。

表1:

| CONTAINERIMAGEID |
|------------------|
|             1000 |
|             2000 |
|             3000 |

表2:

| FLAGGEDCONTAINERID | CONTAINERIMAGEID | REASONCODE |
|--------------------|------------------|------------|
|                  1 |             1000 |          5 |
|                  2 |             1000 |          8 |
|                  3 |             1000 |          4 |
|                  4 |             2000 |          4 |
|                  5 |             2000 |          5 |

我想从CONTAINER_IMAGE中选择所有containerImageId,并从FLAGGED_CONTAINER中选择原因码,以便结果看起来像这样

| CONTAINERIMAGEID | CODES |
|------------------|-------|
|             1000 | 5 8 4 |
|             2000 |   4 5 |

但我不知道如何进行连接。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

不幸的是,你没有指定你正在使用的RDBMS。

如果是 MySQL ,你可以

SELECT c.*, q.codes
  FROM
(
  SELECT containerImageId, GROUP_CONCAT(reasonCode SEPARATOR ' ') codes
    FROM flagged_containers f
   GROUP BY containerImageId
) q JOIN container_image c 
    ON q.containerImageId = c.containerImageId

输出:

| CONTAINERIMAGEID | CODES |
|------------------|-------|
|             1000 | 5 8 4 |
|             2000 |   4 5 |

这是 SQLFiddle 演示


如果是 SQL Server

SELECT c.*, q.codes
  FROM
(
  SELECT DISTINCT containerImageId, STUFF((
    SELECT ' ' + CONVERT(VARCHAR, reasonCode)
    FROM flagged_containers
    WHERE containerImageId = f.containerImageId
    FOR XML PATH ('')
  ), 1, 1, '') codes
    FROM flagged_containers f
) q JOIN container_image c 
    ON q.containerImageId = c.containerImageId

输出:

| CONTAINERIMAGEID | CODES |
|------------------|-------|
|             1000 | 5 8 4 |
|             2000 |   4 5 |

这是 SQLFiddle 演示