SQL一个表上的多个列与其他表的列连接

时间:2018-02-02 20:17:27

标签: sql

我一直在尝试运行SQL查询,但却没有多少运气。无论我做什么,我似乎无法按照我需要的方式运行它。我可以让表格加入并获取名称,但我无法获得我正在寻找的查询输出。

我有两个表,一个表有3列,可以输入第一,第二和第三门技术。第二个表格列出了我们使用的门户技术,技术人员的ID是主要关键。

我正在寻找的是一个SQL语句,它将从门表中获取密钥。示例将是Gate Table ID 2将获得2,2,1,然后与tech table连接并返回技术名称而不是密钥。

如果我执行以下操作,我可以工作,但无法获得3个单独的数据列。

<div class="container">
<div id="1"></div>
<div id="div2">Content</div>
<div id="3">Content</div>
</div>
<div class="container">
<div id="1">1</div>
<div id="div2">Content</div>
<div id="3">Content</div>
</div>

-

SELECT TName
FROM TechTable
INNER JOIN GateTable
ON GateTabe.Gate1=TechTable.ID
WHERE ID = 3

-

  GateTable   
     ID Gate1 Gate2 Gate3
        1    1    2      3
        2    2    2      1
        3    4    2      1

4 Tech4

TechTable
 ID TName
 1  Tech1
 2  Tech2
 3  Tech3

2 个答案:

答案 0 :(得分:2)

join techTable三次,每次不同的门。

SELECT g.id,t1.TName as gate1,t2.TName as gate2,t3.TName as gate3
FROM GateTable g
INNER JOIN TechTable t1 ON g.Gate1=t1.ID
INNER JOIN TechTable t2 ON g.Gate2=t2.ID
INNER JOIN TechTable t3 ON g.Gate3=t3.ID 

答案 1 :(得分:1)

SELECT gt.ID, t1.TName as Gate1, t2.TName as Gate2, t3.TName as Gate3
FROM GateTable gt
LEFT JOIN TechTable t1
ON gt.Gate1=t1.ID
LEFT JOIN TechTable t2
ON gt.Gate2=t2.ID
LEFT JOIN TechTable t3
ON gt.Gate3=t3.ID

您也可以使用INNER JOIN,但它只为您提供映射列。在您的示例中,您将Gate1值指定为4,但它在TechTable中不存在。在这种情况下,INNER JOIN会跳过该值。但LEFT JOIN会为您提供映射值,并为不可用的映射提供null。 如果需要特定的GateID,可以使用where子句。