使用表在一行上查找多个ID

时间:2017-04-28 15:57:16

标签: sql sql-server

我在工作中使用了两个表来帮助我获得编写SQL查询的经验。一个表包含Applications列表,有三列 -  Application_NameApplication_Contact_IDBusiness_Contact_ID。然后,我有一个名为Contacts的单独表格,其中有两列 - Contact_IDContact_Name。我正在尝试编写一个查询,列出Application_NameContact_Name列的Applications_Contact_IDBusiness_Contact_ID,而不是ID号本身。

我知道我需要加入这两个表,但我还没弄清楚如何制定正确的语句。请帮忙!

申请表:

+------------------+------------------------+---------------------+
| Application_Name | Application_Contact_ID | Business_Contact_ID |
+------------------+------------------------+---------------------+
| Adobe            |                     23 |                  23 |
| Word             |                     52 |                  14 |
| NotePad++        |                     44 |                 989 |
+------------------+------------------------+---------------------+

联系表:

+------------+--------------+
| Contact_ID | Contact_Name |
+------------+--------------+
|         23 | Tim          |
|         52 | John         |
|         14 | Jen          |
|         44 | Carl         |
|        989 | Sam          |
+------------+--------------+

我想要的是:

+------------------+--------------------------+-----------------------+
| Application_Name | Application_Contact_Name | Business_Contact_Name |
+------------------+--------------------------+-----------------------+
| Adobe            | Tim                      | Tim                   |
| Word             | John                     | Jen                   |
| NotePad++        | Carl                     | Sam                   |
+------------------+--------------------------+-----------------------+

我已尝试过以下内容,但它只返回其中一列的名称:

SELECT Application_Name, Application_Contact_ID, Business_Contact_ID, Contact_Name FROM Applications JOIN Contact ON Contact_ID = Application_Contact_ID

1 个答案:

答案 0 :(得分:2)

这是一个非常关键的SQL和101部分。考虑在另一个问题上阅读this other answer,这可以更深入地解释联接。您的查询的诀窍是,您必须两次加入CONTACTS表,这有点难以可视化,因为您必须同时访问application_contact_idbusiness_contact_id

有许多种类的联接(INNERLEFTRIGHT等等,您需要熟悉这些联接以供将来参考。请至少阅读本文:https://www.techonthenet.com/sql_server/joins.php

SELECT t1.application_name Application_Name,
  t2.contact_name Application_Contact_name,
  t3.contact_name Business_Contact_name
FROM applications t1
INNER JOIN contacts ON t2 t1.Application_Contact_ID = t2.contact_id -- join contacts for appName
INNER JOIN contacts ON t3 t1.business_Contact_ID = t3.contact_id; -- join contacts for busName