sql - 有没有办法将 Postgresql 的 using 与附加子句结合起来?
问题描述
假设您有一个表 A 和 B:
CREATE TABLE A (
id1
id2
creationDate
...
);
CREATE TABLE B (
id1
id2
lastUsedDate
...
);
您想要执行一个将这两个表连接在一起的选择,但是,您想要连接的其中一个列的名称与另一列不同。
如果您只想加入前两列,则可以执行此查询:
SELECT
id1
, id2
, ...
FROM A
JOIN B using(id1, id2)
;
但是,如果您还想加入日期,则必须执行此查询:
SELECT
a.id1
, a.id2
, ...
FROM A a
JOIN B b ON
a.id1=b.id1
AND a.id2=b.id2
AND a.creationDate=b.lastUsedDate
;
这个查询要冗长得多,如果你省略a.id1
而是使用id1
postgres 会抱怨这id1
是模棱两可的,尽管事实上你使用的INNER JOIN
是列不能模棱两可。
有什么方法可以将功能using()
和不共享相同名称的附加列结合起来?或者您是否被迫在最后一个示例中使用额外的冗长。
解决方案
您可以使用子查询、CTE 或横向连接来添加等效命名的列:
FROM A a JOIN
(SELECT b.*, lastUsedDate as creationDate
FROM B b
) b
USING (id1, id2, creationDate)
WHERE
或者在子句中添加额外的条件:
FROM A a JOIN
B b
USING (id1, id2)
WHERE a.creationDate = b.lastUsedDate
推荐阅读
- android - Android Studio 和蓝牙——不可能的任务
- acumatica - SOOrder 上的 Acumatica 未绑定用户字段
- python-2.7 - 使用默认调度程序的 Dask 内存管理
- django - Django - 类型对象'HttpRequest'没有属性'方法'
- javascript - 只有在数据表行中的几个字段被编辑后才调用 Jquery Ajax
- git - 为什么git soft delete会删除没有合并的分支?
- julia - Julia 1.0 Pkg.add() 没有按预期工作
- flutter - DropdownButtonHideUnderline 自定义高度
- firebase - Firebase 正在将电子邮件提供商帐户转换为其他提供商帐户
- javascript - 打开带有单词的 Google 搜索屏幕 React js