2

同じ列名を共有する 2 つのテーブルで内部結合を使用しようとしています。最初のテーブルは一時テーブルですが、列名は他のテーブルの主キー列名と同じです。列の名前を変更せずに(もちろん一時テーブルで)どうすれば結合できますか?

SELECT * FROM [dbo].[Apps] 
    INNER JOIN #statsForManagerApps on [Apps].[AppId] = #statsForManagerApps.AppId
     WHERE AppId IN 
     (SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId) AND [Enabled]=1 

これが私の結合の様子です。Apps テーブルのすべてのデータが必要なため、* を使用します。

4

4 に答える 4

1

結合にテーブルの別名を使用したい。これにより、クエリが読みやすくなります。

SELECT a.*
FROM [dbo].[Apps] a INNER JOIN
     #statsForManagerApps sfm
     on [Apps].[AppId] = sfm.AppId
WHERE a.AppId IN (SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId) AND
      [Enabled]=1 ;
于 2013-09-11T13:24:28.390 に答える
1

以下のように、テーブルのエイリアスを持つすべての列を指定する必要があります

SELECT A.col1,A.col2, TA.col1,TA.col2  
FROM [dbo].[Apps] A
INNER JOIN #statsForManagerApps TA on A.AppId = TA.AppId
WHERE A.AppId IN (SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId) 
AND A.Enabled=1 

本当にテーブル名を使用できない場合(30列と言ったように)select、上記の代わりに以下のステートメントを試してください:

SELECT *

また

SELECT A.*, TA.*
于 2013-09-11T13:23:23.113 に答える
1

WHERE句でテーブルを指定する必要があります。

WHERE Apps.AppId IN

以下に示すように、テーブルに別名を付けることもできます。

SELECT * FROM [dbo].[Apps] App
INNER JOIN #statsForManagerApps on App.AppId = #statsForManagerApps.AppId
WHERE App.AppId IN 
(SELECT AppId FROM [AppsForManagers] WHERE [Managerid] = @ManagerId) AND [Enabled]=1 
于 2013-09-11T13:23:26.720 に答える
0

使用する AppId 列を指定してみてください。

SELECT * FROM [dbo].[Apps] 
INNER JOIN #statsForManagerApps 
  ON [Apps].[AppId] = #statsForManagerApps.AppId
WHERE [Apps].AppId IN 
  (    SELECT [AppsForManagers].AppId FROM [AppsForManagers] 
        WHERE [Managerid] = @ManagerId
  )
  AND [Enabled]=1 
于 2013-09-11T13:23:48.253 に答える