1

我想在其中一个表上连接带有 id 的两列后对两个表执行简单的连接。

第一步:

SELECT cars.hhid & cars.vmid
FROM cars

现在我想将此结果与另一个表(table2)进行比较。

新结果应该是 table1 (cars) 中与 table2 中的 id 匹配的每一行。

怎么了?

我的代码:

SELECT Cars.* 
FROM (SELECT Cars.hhid & Cars.vmid AS zid
FROM cars) x
JOIN table2 ON table2.id = x.zid;
4

3 回答 3

2

从您在问题中所说的内容来看,我根本不明白您为什么需要子查询。

尝试这个:

select cars.*
from cars 
inner join table2 on cstr(table2.id) = cars.hhid & cars.vmid

(测试 double 为所有三个字段的数据类型)

您不需要子查询,因为您可以将“连接的列”直接放入子句中(当然,如果您需要它们,JOIN您也可以将它们放入子句中)。SELECT

但是,一旦您连接列,Access 似乎将它们视为,string因此您无法将它们直接加入. 这就是为什么您需要将 table2 中的列转换为带有.doubletable2
CStr()

于 2012-04-16T21:06:41.743 回答
1

尝试

SELECT x.* 
FROM (SELECT Cars.hhid & Cars.vmid AS zid
FROM cars) x
INNER JOIN table2 ON table2.id = x.zid;

MS Access 像要指定的连接类型。

于 2012-04-16T16:30:09.127 回答
1

* TSQL 的答案,在学习之前是 MS-Access *

SQL 没有double数据类型,因此您需要使用浮点数。

要使用连接运算符,需要使用或+将值转换为字符串CASTCONVERT

数据:

declare @cars table (hhid float, vmid float)
declare @table2 table (id float)

insert @cars values (1,1),(2,2)
insert @table2 values (11),(22),(12),(21)

询问:

SELECT x.* 
FROM (
    SELECT CAST(c.hhid AS nvarchar(20)) + CAST(c.vmid AS nvarchar(20)) AS zid
    FROM @cars c
    ) x
INNER JOIN @table2 t ON t.id = x.zid

* 尝试 MS-Access *

这样做效果更好吗,对我来说,您的表格引用似乎有些扭曲

SELECT x.* 
FROM (SELECT c.hhid & c.vmid AS zid
FROM cars c) x
JOIN table2 t ON t.id = x.zid;
于 2012-04-16T15:38:08.450 回答