是否可以 INNER JOIN 2 个不同 type/values 的 id?
Is it possible to INNER JOIN 2 id's of a different type/values?
正如标题所说,我正在尝试 INNER JOIN
具有不同 values/data 类型的列。
在一个数据库 table 中,我们称它为 Table A 我想做一个 select 语句来获取几列的值(主题、名称、描述、日期) .虽然我也想要一个关系名称。然而,问题是关系名称(在关系 table、Table B 中设置)在 Table A 中显示为字符串值 (D0001001) - 因此不是文字名称。
要获得文字关系名称,有一个 link 和 Table B,它有一个 ID 列 1001 - 1000~ 和一个关系 'literal' 名称列。例如,在 table B 中,ID 1001 匹配公司名称 MC DONALDS,在 table A 中,RelationID 是 D0001001 (MC DONALDS)。
别问我为什么tableA里的RelationID前面有一个奇怪的D000,我也不知道,但它有一些功能。
所以回到问题。我想从 table A 获取一些字段,但也想从 table B 获取与 table A relationID 值匹配的文字关系名称。
所以问题是,我如何 INNER JOIN
这两个不同的 values/types? tableA中的RelationID
是字符串类型(准确地说是nvarchar
),TableB中匹配关系名的ID
是一个Integer
类型。
我想我可以通过以下方式修复它:
在查询中执行 LIKE 语句,其中 table B(1001 整数)的 ID 与 table A(D0001001 字符串)的 RelationID 部分匹配。然而,这没有用
通过用空值替换 RelationID 'D000' 值来执行 REPLACE
语句:“”。对于 table A 值,这可能仍然需要某种类型的强制转换为整数。这里有一些错误可能是因为语法错误。
我目前拥有的:
SELECT
TableA.subject, TableA.Name, TableA.Description, TableA.Date,
TableB.RelationName
INNER JOIN
TableB ON TableA.RelationID = TableB.ID
这返回了不可能的转换(字符串/整数)。
然后我尝试了:
SELECT
TableA.subject, TableA.Name, TableA.Description, TableA.Date,
TableB.RelationName
INNER JOIN
TableB ON TableB.ID LIKE '% TableA.RelationID %'
这也不起作用 (EOF)。
为了让我的 table 更清楚一点:
Table一个
+------------+------------+----------------+----- --------------+------------+
|关系ID |主题 |说明 |名称 |日期 |
+------------+------------+----------------+----- --------------+------------+
| D0001001 |快餐 |一些描述 |填表人姓名 | 13-3-2015 |
| D0001002 |饮品 |一些描述 |填表人姓名 | 10-3-2015 |
| D0001003 |汽车 |一些描述 |填表人姓名 | 2015 年 7 月 3 日 |
+------------+------------+----------------+----- --------------+------------+
Table B
+------+--------------+
| ID | RelationName |
+------+--------------+
| 1001 | MC DONALDS |
| 1002 | COCA COLA |
| 1003 | MERCEDES |
+------+--------------+
--> INNER加入ID和RelationID
还有其他选择吗?提前致谢!
为了避免转换错误,使用 Substring
然后 convert
删除 RelationID
中的第一个字符,然后 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
Do a LIKE statement in the query where the ID of table B (1001
integer) partly matches the RelationID of table A (D0001001 string).
This however didnt worked.
反过来试试:
SELECT TableA.Subject,
TableA.Name,
TableA.Description,
TableA.Date,
TableB.RelationName
FROM TableA
INNER JOIN TableB ON TableA.ID LIKE '%' + CAST(TableB.RelationID AS NVARCHAR(50)) + '%'
SELECT TableA.subject, TableA.Name, TableA.Description, TableA.Date, TableB.RelationName1
FROM TableA -- insert this line here
INNER JOIN TableB
ON TableB.ID LIKE '%TableA.RelationID%'
为了进行第二个查询 运行,您需要插入 from 子句。除非这是上传时的错误输入,否则它应该可以正常工作,尽管它可能无法准确提供您想要的内容。
如果 RelationalID 列总是有相同的添加项,我会考虑将其从字符串中删除。像这样:
ON TableB.ID = RIGHT(TableA.RelationalID,4)
SQL 应该为您进行从字符串到整数的转换,以便您在比较中进行隐式转换。如果不只是添加 cast 语句:
ON TableB.ID = CAST(RIGHT(TableA.RelationalID,4) AS INT)
您可以在 INNER JOIN
中使用 LIKE
,但这会降低查询的性能,因为 LIKE
有时会妨碍索引的有效使用。
正如标题所说,我正在尝试 INNER JOIN
具有不同 values/data 类型的列。
在一个数据库 table 中,我们称它为 Table A 我想做一个 select 语句来获取几列的值(主题、名称、描述、日期) .虽然我也想要一个关系名称。然而,问题是关系名称(在关系 table、Table B 中设置)在 Table A 中显示为字符串值 (D0001001) - 因此不是文字名称。
要获得文字关系名称,有一个 link 和 Table B,它有一个 ID 列 1001 - 1000~ 和一个关系 'literal' 名称列。例如,在 table B 中,ID 1001 匹配公司名称 MC DONALDS,在 table A 中,RelationID 是 D0001001 (MC DONALDS)。
别问我为什么tableA里的RelationID前面有一个奇怪的D000,我也不知道,但它有一些功能。
所以回到问题。我想从 table A 获取一些字段,但也想从 table B 获取与 table A relationID 值匹配的文字关系名称。
所以问题是,我如何 INNER JOIN
这两个不同的 values/types? tableA中的RelationID
是字符串类型(准确地说是nvarchar
),TableB中匹配关系名的ID
是一个Integer
类型。
我想我可以通过以下方式修复它:
在查询中执行 LIKE 语句,其中 table B(1001 整数)的 ID 与 table A(D0001001 字符串)的 RelationID 部分匹配。然而,这没有用
通过用空值替换 RelationID 'D000' 值来执行
REPLACE
语句:“”。对于 table A 值,这可能仍然需要某种类型的强制转换为整数。这里有一些错误可能是因为语法错误。
我目前拥有的:
SELECT
TableA.subject, TableA.Name, TableA.Description, TableA.Date,
TableB.RelationName
INNER JOIN
TableB ON TableA.RelationID = TableB.ID
这返回了不可能的转换(字符串/整数)。
然后我尝试了:
SELECT
TableA.subject, TableA.Name, TableA.Description, TableA.Date,
TableB.RelationName
INNER JOIN
TableB ON TableB.ID LIKE '% TableA.RelationID %'
这也不起作用 (EOF)。
为了让我的 table 更清楚一点:
Table一个 +------------+------------+----------------+----- --------------+------------+ |关系ID |主题 |说明 |名称 |日期 | +------------+------------+----------------+----- --------------+------------+ | D0001001 |快餐 |一些描述 |填表人姓名 | 13-3-2015 | | D0001002 |饮品 |一些描述 |填表人姓名 | 10-3-2015 | | D0001003 |汽车 |一些描述 |填表人姓名 | 2015 年 7 月 3 日 | +------------+------------+----------------+----- --------------+------------+
Table B
+------+--------------+
| ID | RelationName |
+------+--------------+
| 1001 | MC DONALDS |
| 1002 | COCA COLA |
| 1003 | MERCEDES |
+------+--------------+
--> INNER加入ID和RelationID
还有其他选择吗?提前致谢!
为了避免转换错误,使用 Substring
然后 convert
删除 RelationID
中的第一个字符,然后 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
Do a LIKE statement in the query where the ID of table B (1001 integer) partly matches the RelationID of table A (D0001001 string). This however didnt worked.
反过来试试:
SELECT TableA.Subject,
TableA.Name,
TableA.Description,
TableA.Date,
TableB.RelationName
FROM TableA
INNER JOIN TableB ON TableA.ID LIKE '%' + CAST(TableB.RelationID AS NVARCHAR(50)) + '%'
SELECT TableA.subject, TableA.Name, TableA.Description, TableA.Date, TableB.RelationName1
FROM TableA -- insert this line here
INNER JOIN TableB
ON TableB.ID LIKE '%TableA.RelationID%'
为了进行第二个查询 运行,您需要插入 from 子句。除非这是上传时的错误输入,否则它应该可以正常工作,尽管它可能无法准确提供您想要的内容。
如果 RelationalID 列总是有相同的添加项,我会考虑将其从字符串中删除。像这样:
ON TableB.ID = RIGHT(TableA.RelationalID,4)
SQL 应该为您进行从字符串到整数的转换,以便您在比较中进行隐式转换。如果不只是添加 cast 语句:
ON TableB.ID = CAST(RIGHT(TableA.RelationalID,4) AS INT)
您可以在 INNER JOIN
中使用 LIKE
,但这会降低查询的性能,因为 LIKE
有时会妨碍索引的有效使用。