多列查询合并单行:关联两表生成指定结果的SQL语句怎么写?
解决多字段关联同一表的SELECT查询问题
这是个典型的多表关联场景,我们需要从表B里分别匹配表A中两个不同ItemCode对应的类型——因为要多次关联同一张表,所以得给表B起不同的别名来区分关联逻辑。
先明确两张表的结构和数据:
表A结构与数据
CREATE TABLE TableA ( Item1Name VARCHAR(50), Item1Code VARCHAR(10), Item2Name VARCHAR(50), Item2Code VARCHAR(10) ); INSERT INTO TableA VALUES ('ABC', '001', 'DEF', '002');
表B结构与数据
CREATE TABLE TableB ( ItemCode VARCHAR(10), ItemType VARCHAR(50) ); INSERT INTO TableB VALUES ('001', 'Cookware'), ('002', 'Drinks');
最终的SELECT语句
SELECT a.Item1Name, a.Item1Code, a.Item2Name, a.Item2Code, b1.ItemType AS Item1Type, b2.ItemType AS Item2Type FROM TableA a JOIN TableB b1 ON a.Item1Code = b1.ItemCode JOIN TableB b2 ON a.Item2Code = b2.ItemCode;
语句解释
- 给表A起别名
a简化书写; - 第一次关联表B用别名
b1,匹配Item1Code,把对应的ItemType重命名为Item1Type; - 第二次关联表B用别名
b2,匹配Item2Code,把对应的ItemType重命名为Item2Type; - 这里用的是
JOIN(内连接),只有当表B中存在对应Code时才会返回结果;如果需要即使表B没有匹配Code也保留表A的数据,可以换成LEFT JOIN。
执行这条语句后,就能得到你想要的结果:
| Item1Name | Item1Code | Item2Name | Item2Code | Item1Type | Item2Type |
|---|---|---|---|---|---|
| ABC | 001 | DEF | 002 | Cookware | Drinks |
内容的提问来源于stack exchange,提问作者yeungcase
相关产品推荐
相关产品推荐

