0

私のアプリケーションには最初、次のようなクエリがありました:-

SELECT column_name from PERSON
WHERE name in (list);

list はカンマ区切りのリストです。

しかし、要件が変更されたため、名前と年齢を指定して Persons テーブルにクエリを実行する必要があります。私はAgeListという名前を持っています。

最初は、これに似たクエリが機能すると思いました(nameAgeListからnameListとageListを作成します)

SELECT column_name from Person 
WHERE name in (nameList) 
AND age in (ageList)

しかし、よく考えてみると、これは間違ったクエリのようです。

このクエリの進め方を教えてください。

4

3 に答える 3

5

Oracle では、これを行うことができます。

SELECT * FROM Person
WHERE
    (name, age) IN (
        ('name1', age1),
        ('name2', age2)
        -- Etc...
    )

このリストには最大 1000 個のタプルを含めることができます。

于 2011-08-21T02:44:22.833 に答える
2

1つのオプションは、一時テーブル(または、SQL Serverの場合はテーブル変数)を作成し、名前と年齢をこのテーブルに配置してから、単純にそれに結合することです。

SELECT column_name from Person p
INNER JOIN myTempTable t ON t.Name = p.Name AND t.age = p.age
于 2011-08-21T01:58:51.523 に答える
0

きれいではありません。これは、コードでステートメントを生成できる場合にのみ機能します。

SELECT column from Person
    WHERE 1=1
      AND (   ( name = name1 and age = age1 )
           OR ( name = name2 and age = age2 )
           OR ( name = name3 and age = age3 )
           OR ( name = name4 and age = age4 )
           OR ( name = name5 and age = age5 )
           ... et cetera 
          )

これらのリストをテーブルに入れることができれば、これよりもはるかにうまくいくでしょう。これらのリストをデータベースに取得する方法はありますか? 各個人の名前と年齢を保持する Person テーブルが本当に必要だと思います。

于 2011-08-21T01:26:30.130 に答える