mariadb SQL concat表中的键/值对中的单个列

643ylb08  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在寻找一种方法来将一个表连接到一个查询中,该查询可以使用代码解析出来,而不需要任何关于表的先验知识,除了连接方法(所以我不能手动添加CONCAT("'builder:'",occupations.builder,","'trader:'",occupations.trader,"),因为我不知道实际的表名)。
表1:客户端

| id | client_id | name | age |
| 0  |    0001   | john |  20 |
| 1  |    0002   | bob  |  22 |

表2:职业

| id | client_id | builder | trader |
| 0  |    0001   | 0       | 1      |
| 1  |    0002   | 1       | 0      |

示例查询

SELECT *, CONCAT(#some query here#) AS 'occupation' FROM client
LEFT JOIN occupation
ON client.client_id = occupations.client_id
GROUP BY client.client_id
ORDER BY client.client_id ASC

输出

| id | client_id | name | age | occupation              |
| 0  |    0001   | john |  20 | 'builder':0, 'trader':1 |
| 1  |    0002   | bob  |  22 | 'builder':0, 'trader':1 |
js4nwp54

js4nwp541#

不需要#some query here#,只需使用已知的列名(尽管是硬编码的,正如前面的注解中提到的那样)和CONCAT中的查询值。
因此,知道了这一点,这个修改后的CONCAT示例与您的查询:
(note我还修改了SELECT *,部分,使其具有相同的列,以匹配您的输出示例)

SELECT clients.id, clients.client_id, name, age, 
       CONCAT("'builder':", builder, ", 'trader':", trader) AS 'occupation'
  FROM clients LEFT JOIN occupations ON clients.client_id = occupations.client_id
GROUP BY clients.client_id
ORDER BY clients.client_id ASC;

给出输出:

这里有一个上面例子的dbfiddle来给予一下。

相关问题