sql - 使用表查找一行上的多个 ID

标签 sql sql-server

我在工作中使用两个表来帮助我获得编写 SQL 查询的经验。一个表包含Applications 列表,并具有三列 - Application_NameApplication_Contact_IDBusiness_Contact_ID。然后,我有一个名为 Contacts 的单独表,其中包含两列 - Contact_IDContact_Name。我正在尝试编写一个查询,该查询将列出 Applications_Contact_IDBusiness_Contact_ID 列的 Application_NameContact_Name 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                   |
+------------------+--------------------------+-----------------------+

我已尝试以下操作,但它仅返回其中一列的名称:

选择应用程序名称、应用程序联系人 ID、业务联系人 ID、联系人姓名 来自应用程序 JOIN 联系人 ON Contact_ID = Application_Contact_ID

最佳答案

这是 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

关于sql - 使用表查找一行上的多个 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43684363/

相关文章:

MySQL - InnoDB,缓存查询的一部分以加快执行时间

sql - 将重复的 varchars 更新为在 SQL 数据库中是唯一的

mysql - 表之间的多个连接

sql-server - 文件组“PRIMARY”中的磁盘空间不足-SQL Server 2008

sql-server - SQL狂跳Identity Seed

sql - 如何连接到其名称作为值存储在另一个表中的表?

mysql - 如何使用 SQL 查询从字母数字中获取数值并按数字排序

c# - 将 Graphql 转换为 SQL?

sql-server - 如何编写一个 SQL 查询来查找数据库中所有列和所有表中的值?

sql - 无法在函数MS SQL中声明变量