You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL实现关联Table1与Table2并按Table2列值筛选Table1列?

SQL实现方案:根据关联表筛选匹配列

现有数据表

Table1

col_1abc
1121314

Table2

col_1col_2
1a
1c

需求说明

将Table1与Table2通过table1.col_1 = table2.col_1关联,筛选出Table1中列名与Table2.col_2值匹配的列。


静态实现方案(已知匹配列)

如果已明确Table2.col_2对应的目标列(如示例中的a和c),可直接编写固定SQL:

SELECT DISTINCT
    t1.col_1,
    t1.a,
    t1.c
FROM Table1 t1
JOIN Table2 t2 ON t1.col_1 = t2.col_1;

使用DISTINCT避免因Table2多行关联导致结果重复。


动态实现方案(列名由Table2动态决定)

若Table2的col_2值不固定,需动态生成查询列,以下是主流数据库的实现方式:

MySQL/MariaDB

通过预处理语句生成并执行动态SQL:

SET @cols = (SELECT GROUP_CONCAT(DISTINCT t2.col_2 SEPARATOR ', ') FROM Table2 t2);
SET @sql = CONCAT('SELECT DISTINCT t1.col_1, ', @cols, ' FROM Table1 t1 JOIN Table2 t2 ON t1.col_1 = t2.col_1');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

PostgreSQL

利用string_agg拼接列名,结合EXECUTE执行动态逻辑:

DO $$
DECLARE
    cols text;
BEGIN
    SELECT string_agg(DISTINCT col_2, ', ') INTO cols FROM Table2;
    EXECUTE format('SELECT DISTINCT t1.col_1, %s FROM Table1 t1 JOIN Table2 t2 ON t1.col_1 = t2.col_1', cols);
END $$;

SQL Server

使用STRING_AGG拼接列名,通过sp_executesql执行动态SQL:

DECLARE @cols NVARCHAR(MAX);
DECLARE @sql NVARCHAR(MAX);

SELECT @cols = STRING_AGG(DISTINCT col_2, ', ') FROM Table2;

SET @sql = N'SELECT DISTINCT t1.col_1, ' + @cols + N' FROM Table1 t1 JOIN Table2 t2 ON t1.col_1 = t2.col_1';

EXEC sp_executesql @sql;

内容的提问来源于stack exchange,提问作者Muhammad Irtiza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:10:26