很抱歉这样一个基本问题,但我的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 |
但我不知道如何进行连接。任何帮助表示赞赏。
答案 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 演示