加入子查询

时间:2012-04-16 15:32:31

标签: sql ms-access join subquery

我希望在其中一个表上使用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;

3 个答案:

答案 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。

要使用连接运算符+,需要使用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;

答案 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就像要指定的连接类型一样。