sql - 加入对多个列出的外 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 表的名称字段信息。主键是前面结果中的外键。
为什么我应该做什么样的加入?或者我必须使用子程序或类似的东西吗?
我没有使用数据库中的真实数据。我替换了查询的名称。
感谢同事的帮助!
解决方案
基本上使用 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');
如上面的评论中所写:始终在列前加上表别名,以便明确告知应从何处使用该列。
推荐阅读
- oracle - PL/SQL 错误处理后继续执行
- ios - 无法将选定行的值分配给变量
- batch-file - 使用批处理脚本递归比较2个文件夹的内容,并将差异复制到第三个文件夹
- testing - TFS Web 界面是否支持 Internet Explorer 11 中的测试管理
- excel - 无法自动刷新 HPE 的 excel SFDC 连接器
- java - 插入服务中的房间而不更新活动中的 LiveData
- python - 在管道中拟合参数:pipeline.set_params() vs **params inside estimator
- javascript - 在 url 中使用正则表达式模式获取搜索词
- jquery - 怎么做:“选择所有其他元素,除了这个”
- angular - 有比内部订阅更好地结合两个同时请求的更优雅的方式吗?