Sql 从一个表创建到查找表的多个联接

Sql 从一个表创建到查找表的多个联接,sql,join,sql-server-2012,Sql,Join,Sql Server 2012,假设我在sql中有一个表a,其中的数据如下所示 现在我有了另一个查找表B 现在,我如何从查找表B中获取同一记录的Type Name和Business Name的值。 例如,对于类型为T1的记录,对于相同的记录请求,应将类型名称返回为“产品”,将业务名称返回为“SCI”。我使用了内部连接来实现这一点,但它会发生冲突,因为对于表A中的同一条记录,它会尝试从查找表中获取相应的值 Select B.name, A.type,A.business_line from Table A A inner j

假设我在sql中有一个表a,其中的数据如下所示

现在我有了另一个查找表B

现在,我如何从查找表B中获取同一记录的Type Name和Business Name的值。 例如,对于类型为T1的记录,对于相同的记录请求,应将类型名称返回为“产品”,将业务名称返回为“SCI”。我使用了内部连接来实现这一点,但它会发生冲突,因为对于表A中的同一条记录,它会尝试从查找表中获取相应的值

Select B.name, A.type,A.business_line 
from Table A A 
inner join Table B B on A.request_id = B.id
你只需要两个连接吗

您需要将表A连接到表B两次,一次获取类型名称,一次获取业务名称:


您只需使用单独的联接引用查找表两次,即可检索2个值。下面的示例向您展示了如何做到这一点,链接上有一个可运行的演示:

-- setup demo schema with data
create table TableA 
(
  request_id int,
  [type] nvarchar(10),
  [business_line] nvarchar(10)  
);

create table TableB 
(
  id int,
  [code]  nvarchar(10),
  [name]  nvarchar(10)
);

INSERT INTO TableA
    ([request_id], [type], [business_line])
VALUES
    (1, 'T1', 'BL1'),
    (2, 'T1', 'BL2'),
    (3, 'T2', 'BL3'),
    (4, 'T1', 'BL1')
;

INSERT INTO TableB
    (id, [code], [name])
VALUES
    (19, 'BL1', 'SCI'),
    (20, 'BL2', 'PCI'),
    (67, 'T1', 'Product'),
    (68, 'T2', 'Substance')
;
质疑

生成:注意,第3行在示例数据中没有匹配的查找

如果有没有查找值的行,可以修改查询联接,这样就不会像第3行那样排除行


数据作为图像是我们无法使用的。请以表格格式文本或更好的DDL和DML语句形式提供数据。您还需要向我们展示您期望的结果。帮助我们,帮助你。
SELECT a.request_id, a.type, b1.name AS [Type Name], a.business_line, b2.name AS [Business Name]
FROM TableA a
JOIN TableB b1 ON b1.code = a.type
JOIN TableB b2 ON b2.code = a.business_line
-- setup demo schema with data
create table TableA 
(
  request_id int,
  [type] nvarchar(10),
  [business_line] nvarchar(10)  
);

create table TableB 
(
  id int,
  [code]  nvarchar(10),
  [name]  nvarchar(10)
);

INSERT INTO TableA
    ([request_id], [type], [business_line])
VALUES
    (1, 'T1', 'BL1'),
    (2, 'T1', 'BL2'),
    (3, 'T2', 'BL3'),
    (4, 'T1', 'BL1')
;

INSERT INTO TableB
    (id, [code], [name])
VALUES
    (19, 'BL1', 'SCI'),
    (20, 'BL2', 'PCI'),
    (67, 'T1', 'Product'),
    (68, 'T2', 'Substance')
;
select A.request_id, A.[type], A.[business_line], 
        Btype.[name] as Type_Name, 
        BName.[name] as Business_Name
from TableA A
inner join TableB BType on A.[type] = BType.[code]
inner join TableB BName on A.[business_line] = BName.[code];
| request_id | type | business_line | Type_Name | Business_Name |
| ---------- | ---- | ------------- | --------- | ------------- |
| 1          | T1   | BL1           | Product   | SCI           |
| 2          | T1   | BL2           | Product   | PCI           |
| 4          | T1   | BL1           | Product   | SCI           |