Nic*_*las 2 sql sql-server join inner-join
正如标题所说,我正在尝试使用INNER JOIN具有不同值/数据类型的列.
在一个数据库表中,我们称之为表AI我想做一个select语句来获取几列(Subject,Name,Description,Date)的值.虽然我也想要一个关系名称.但问题是关系名称(在关系表中设置,表B)在表A中显示为字符串值(D0001001) - 因此不是文字名称.
为了获得文字关系名称,存在与表B的链接,其具有ID列1001-1000~和关系'文字'名称列.因此,例如在表B中,ID 1001匹配公司名称MC DONALDS,在表A中,RelationID是D0001001(MC DONALDS).
不要问我为什么表A中的RelationID与它前面的奇怪D000有关,我不知道,但它有一些功能.
所以回到问题所在.我想从表A中获取一些字段,但也要从表B中获取文字关系名称,它与表A的relationID值匹配.
所以问题是,我如何才能INNER JOIN对这两种不同的值/类型进行研究?RelationID在表A中是字符串类型(nvarchar确切地说),在表B中ID,匹配关系名称是一种Integer类型.
我以为我可以解决它:
在查询中执行LIKE语句,其中表B(1001整数)的ID部分匹配表A的RelationID(D0001001字符串).然而,这不起作用
REPLACE通过替换RelationID'D000'值来做一个声明:"".对于表A值,这可能仍然需要某种类型的强制转换为整数.这里有一些错误可能是因为语法错误.
到目前为止我所拥有的:
SELECT
TableA.subject, TableA.Name, TableA.Description, TableA.Date,
TableB.RelationName
INNER JOIN
TableB ON TableA.RelationID = TableB.ID
Run Code Online (Sandbox Code Playgroud)
这返回了一个不可能的转换(字符串/整数).
那么我试过:
SELECT
TableA.subject, TableA.Name, TableA.Description, TableA.Date,
TableB.RelationName
INNER JOIN
TableB ON TableB.ID LIKE '% TableA.RelationID %'
Run Code Online (Sandbox Code Playgroud)
这也不起作用(EOF).
为了让我的表格更清晰:
表A + ------------ + ----------- + ------------------ + --- ------------------ + ----------- + | RelationID | 主题| 说明| 名称| 日期| + ------------ + ----------- + ------------------ + ----- ---------------- + ----------- + | D0001001 | 快餐| 一些描述| 填料名称| 13-3-2015 | | D0001002 | 饮料| 一些描述| 填料名称| 10-3-2015 | | D0001003 | 汽车| 一些描述| 填料名称| 7-3-2015 | + ------------ + ----------- + ------------------ + ----- ---------------- + ----------- +
表B.
+------+--------------+
| ID | RelationName |
+------+--------------+
| 1001 | MC DONALDS |
| 1002 | COCA COLA |
| 1003 | MERCEDES |
+------+--------------+
Run Code Online (Sandbox Code Playgroud)
- > INNER连接ID和RelationID
任何替代品?提前致谢!
从皈依误差逸出去除第一字符RelationID使用Substring然后convert将RelationID到INT然后JOIN与ID在塔tableA
SELECT TableA.subject,
TableA.Name,
TableA.Description,
TableA.Date,
TableB.RelationName
FROM tableA
INNER JOIN TableB
ON CONVERT(INT, Substring(TableA.RelationID, 2, Len(TableA.RelationID))) = TableB.ID
Run Code Online (Sandbox Code Playgroud)