1

これらのテーブルの1つでIDを持つ2つの列を接続した後、2つのテーブルで単純な結合を実行したいと思います。

最初の一歩:

SELECT cars.hhid & cars.vmid
FROM cars

次に、この結果を別のテーブル(table2)と比較します。

新しい結果は、table2のidと一致するtable1(車)のすべての行になります。

どうしたの?

私のコード:

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

( 3つのフィールドすべてのデータ型としてテスト済み)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;

指定する結合タイプのようなMSAccess。

于 2012-04-16T16:30:09.127 に答える
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;
于 2012-04-16T15:38:08.450 に答える