我正在处理两个表: “dyndomrun.ddid” =使用主键和 “domainregion.domainid” =没有任何主键或外键。
“dyndomrun.ddid”定义是“字符变化”并且有8个字符,而“domainregion.domainid”定义也是“字符变化”但有10个字符。
问题:domainregion表中有一些字段需要与dyndomrun表中的主键连接在一起。我似乎无法使用简单的JOIN语句执行此操作,如下所示:
SELECT domainregion.domainid, domainregion.dombegin, domainregion.domend, dyndomrun.ddid
FROM domainregion, dyndomrun
WHERE domainregion.domainid = dyndomrun.ddid
ORDER BY domainregion.domainid, dyndomrun.ddid, domainregion.dombegin, domainregion.domend;
我尝试过JOINS,INNER JOINS,LIKE,它们似乎都没有用。我正在处理的数据库纯粹基于SQL,使用PostgreSQL存储。
我是否可以使用一种方法,根据字符的长度选择domainregion.domainid并将其与dyndomrun.ddid匹配?
请告知。
答案 0 :(得分:1)
尝试此操作仅比较前8个字符:
SELECT r.domainid, r.dombegin, r.domend, d.ddid
FROM domainregion r
JOIN dyndomrun d ON r.domainid::varchar(8) = d.ddid
ORDER BY r.domainid, d.ddid, r.dombegin, r.domend;
演员表隐式修剪尾随字符。 ddid
只有8个字符开头。也不需要处理它。这实现了同样的目的:
JOIN dyndomrun d ON left(r.domainid, 8) = d.ddid
但是,请注意,字符串函数left()
仅在PostgreSQL 9.1中引入。在早期版本中,您可以替换:
JOIN dyndomrun d ON substr(r.domainid, 1, 8) = d.ddid
__
查询使用JOIN
。阅读more about that in the manual。
FROM domainregion r
是FROM domainregion AS r
的缩写。在PostgreSQL中,AS
只是噪音。 表别名使查询更短,更易于阅读,但此处没有其他影响。例如,您也可以使用表别名多次包含同一个表。
连接条件ON r.domainid::varchar(8) = d.ddid
仅将两个表达式完全匹配的行连接在一起。再次,阅读有关basics in the manual(或任何其他来源)的内容。
这是一个简单的查询,在这里解释不多。