我希望在其中一个表上使用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;
答案 0 :(得分:2)
根据你在问题中的说法,我不明白为什么你需要一个子查询。
试试这个:
select cars.*
from cars
inner join table2 on cstr(table2.id) = cars.hhid & cars.vmid
(使用 double
作为所有三个字段的数据类型进行测试)
您不需要子查询,因为您可以将“连接列”直接放入JOIN
子句中(当然,如果您需要它们,也可以将它们放入SELECT
子句中)。
但是,只要您连接列,Access就会将它们视为string
,因此您无法直接将它们加入double
中的table2
列。<登记/>
这就是为什么你需要将table2中的列转换为CStr()
的字符串。
答案 1 :(得分:1)
* TSQL的答案,在学习之前是MS-Access *
SQL没有double
数据类型,因此您需要使用float。
要使用连接运算符+
,需要使用CAST
或CONVERT
数据:
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;
答案 2 :(得分:1)
尝试
SELECT x.*
FROM (SELECT Cars.hhid & Cars.vmid AS zid
FROM cars) x
INNER JOIN table2 ON table2.id = x.zid;
MS Access就像要指定的连接类型一样。