0

簡単な例を示して説明します

table NAMES
 ID_NAMES
 NAME

table AGES
 ID_AGES
 AGE

これは私の質問です

SELECT 
( 
  select NAME
  from NAMES 
  where ID_NAME=1
) as thisismyname,
(
  select AGE
  from AGES
  where ID_AGE=50
) as thisiymyage

私は次のような結果を期待しています

thisismyname, thisismyage

結合を実行して簡単なクエリを取得できるため、これが完全に愚かであることを完全に認識していますが、テーブル間にリンクがなく、これは2つではなく50の選択の組み合わせの結果になります。

動作していますが、使用するだけでクエリできるDataTableが必要です

 mydatatable[0]["thisismyname"]

実際には、ExecuteScalarでのみ結果が得られ、SQLDataReaderは空のDataTableを提供します

using (var conn = Connection)
{
  DbCommand mycommand = GetCommand(conn, sql);
  DbDataReader reader = mycommand.ExecuteReader();
  dt.Load(reader);
  reader.Close();
  conn.Close();
}
4

1 に答える 1

2

これは SQL で行う必要があります。問題がある場合は、別のことを試みることができます。それらを結合するためにテーブルにインデックスは必要ありません。

  select distinct n.NAME, a.AGE
  from NAMES n
     JOIN AGES a on a.ID = n.ID
  where n.ID=1

2 つのデータ テーブルを取得して何らかの形でマージするカスタム コードを作成することもできますが、それが良い解決策になるとは思いません。

何らかの理由で AGES と NAMES の ID が異なり、結合できない場合は、AgeId と NameId の 2 つのパラメーターを使用して SQL クエリを作成する必要があります。

  select distinct n.NAME, a.AGE
  from NAMES n
        cross join AGES a
  where n.ID=@nameId
    and a.ID=@ageId
于 2013-01-04T13:44:30.003 に答える