首页 > 解决方案 > 加入对多个列出的外 ID 键表的查询?

问题描述

现在我有一个这样的查询:

SELECT productorder_key as vt_key, checkin_key as sk_key, product_set_key as vle_key
FROM product_row
LEFT JOIN product_set vle ON vle.key = product_set_key
WHERE sendtime >= FORMAT(GETDATE(), '2019-01-01') AND sendtime <= FORMAT(GETDATE(), '2020-12-31');

结果如下所示:

vt_key | sk_key | vle_key
-------------------------
FDSDST | GFDDGD | FDSFST
GS4234 | FGFD43 | GD3DFS

所以问题是:如何通过这些外键从表中获取信息?有像 vt、sk 和 vle 这样的表。例如,我应该通过 vt_key 获取 vt 表的名称字段信息。主键是前面结果中的外键。

为什么我应该做什么样的加入?或者我必须使用子程序或类似的东西吗?

我没有使用数据库中的真实数据。我替换了查询的名称。

感谢同事的帮助!

标签: sqlsql-server

解决方案


基本上使用 aLEFT JOIN是从外部表中获取数据的正确方法。加入后,您可以将带有星号的表格别名添加到投影中,以便获取表格的所有列vle。或者您用于vt.name获取特定列。

SELECT vle.*, vt.* 
FROM product_row
 LEFT JOIN product_set vle ON vle.key = product_set_key
 LEFT JOIN product_set vt  ON vt.key = productorder_key
WHERE sendtime >= FORMAT(GETDATE(), '2019-01-01') 
    AND sendtime <= FORMAT(GETDATE(), '2020-12-31');

如上面的评论中所写:始终在列前加上表别名,以便明确告知应从何处使用该列。


推荐阅读