我正在尝试从两个不同的表中引用两个主键,但问题是由于它的字符长度它们不匹配。
例如,person.personid = '1234'
和department.personid = '12345'
。
是否有一个SQL语句,我可以使用它来匹配主键的前4或5个字符,或者我可以使用任何其他方法。
更新:真诚的道歉。我正在处理两张桌子。 "dyndomrun.ddid"
使用主键,"domainregion.domainid"
没有任何主键或外键。 “dyndomrun”表DDL设置为"character varying"
并且有8个字符,而“domainregion”表DDL也设置为“字符变化”但有10个字符。
问题:domainregion
表中的某些字段需要与dyndomrun
表中的主键连接在一起。我似乎无法使用简单的SQL语句(如下面的
SELECT domainregion.domainid, dyndomrun.ddid
FROM domainregion, dyndomrun
WHERE domainregion.domainid = dyndomrun.ddid
ORDER BY domainregion.domainid, dyndomrun.ddid;
我尝试过JOINS,INNER JOINS,LIKE,它们似乎都没有用。我正在处理的数据库纯粹基于SQL,使用PostgreSQL存储。
请告知。
答案 0 :(得分:1)
你的意思是
select *
from t1
, t2
where to_char(t1.id) = substr(t2.id,1,4)
或其他方式:
select *
from t1
, t2
where t1.id = round(t2.id/10)
以上解决方案均假定t1.id
比t2.id
短一个字符。
HTH
答案 1 :(得分:1)
试试这个......
SELECT *
FROM person
INNER JOIN department ON person.personid = LEFT(department.personid,4)
答案 2 :(得分:1)
你的问题没有意义。我们不会将一个表的主键映射到另一个表的主键。
现在我们将依赖表的外键映射到引用表的主键。但在这种情况下,两个表中列的值必须匹配。 DEPARTMENT.PERSONID中的12345
必须引用PERSON.PERSONID中的记录12345
,因为.PERSON.PERSONID中的1234
实际上是另一个人。
也许你正在使用一个糟糕的数据模型,其中依赖表有一些智能键,其中只有一部分引用了父键。如果是这样的话,我表示哀悼。但是您需要提供一些具体细节,以及DBMS风格的一些指示(因为不同产品的解决方案会有所不同)。
但是你最大的问题是:一旦你尝试在除列之间的相等之外的任何事情上应用关系完整性,你就有可能在.PERSON.PERSONID中将1234
与DEPARTMENT.PERSONID中的1234
匹配,DEPARTMENT.PERSONID中的DEPARTMENT.PERSONID 和 12345
中的123456
。这可能不是你想要的。