Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

FOR SOME

フィールド値の条件テストに基づいて、レコードを返すかどうかを決定します。

Synopsis

FOR SOME (table [AS t-alias]) (fieldcondition)

引数

table table には、単一のテーブル、またはテーブルのコンマ区切りリストを指定できます。括弧で囲む必要があります。
AS t-alias オプション — 上記の table 名のエイリアス。エイリアスは有効な識別子である必要があり、区切り文字付き識別子とすることができます。詳細は、"Caché SQL の使用法" の “識別子“ の章を参照してください。AS キーワードはオプションです。
fieldcondition fieldcondition には、1 つまたは複数のフィールドを参照する、1 つまたは複数の条件式を指定します。fieldcondition は括弧で囲みます。AND (&) および OR (!) 論理演算子を使用して、複数の条件式を fieldcondition 内に指定できます。

説明

FOR SOME 述語を使用すると、テーブル内の 1 つまたは複数のフィールド値にブーリアン条件テストを実行した結果に基づいて、レコードを返すかどうかを決定できます。fieldcondition が True と評価された場合は、レコードが返されます。fieldcondition が False と評価された場合は、レコードは返されません。

述語条件を指定できる場所であればどこでも、FOR SOME を使用できます。詳細は、このドキュメントの "述語の概要" ページを参照してください。

Caché リリース 2015.1 以降では、区切り括弧は table (また、そのオプション t-alias) 引数には必須となっています。区切り括弧は、fieldcondition 引数でも必須となります。空白は使用できますが、これら 2 組の括弧の間には必要ではありません。

一般に、FOR SOME は、別テーブル内のレコードの内容に基づいてテーブルからレコードを返すかどうかを決定するために使用されます。FOR SOME は、同一テーブル内のレコードの内容に基づいてテーブルからレコードを返すかどうかを決定するためにも使用できます。この後者の場合は、すべてのレコードが返されるか、レコードは返されないかのどちらかです。

以下の例では、FOR SOME は、Sample.Person テーブルから、その Name フィールド値が Sample.Employee テーブル内の Name フィールド値と一致するすべてのレコードを返します。

SELECT Name,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(e.Name=p.Name)
ORDER BY Name

以下の例では、FOR SOME は、同一テーブルのブーリアン・テストに基づいて Sample.Person テーブル内のレコードを返します。このプログラムは、65 より大きい Age 値が含まれるレコードが 1 つでもあれば、すべての Sample.Person レコードを返します。それ以外の場合はレコードを返しません。Sample.Person 内の 1 つ以上のレコードの Age フィールドに 65 より大きい値が含まれているため、すべての Sample.Person レコードが返されます。

SELECT Name,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE FOR SOME (Sample.Person)(Age>65)
ORDER BY Age

ほとんどの述語と同様、以下の例に示すように、NOT 論理演算子を使用して FOR SOME の論理を反転できます。

SELECT Name,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE NOT FOR SOME (Sample.Person)(Age>65)
ORDER BY Age

複合条件

fieldcondition には、複数の条件式を含めることができます。条件のセットは括弧で囲みます。複数の条件は論理演算子 AND および OR を使用して指定します。これは & および ! 記号で指定することもできます。論理演算子の後に単項否定論理演算子を付けることもできます。既定では、条件は左から右の順に評価されます。括弧を使用して複数の条件をまとめることによって、評価の順序を変えることができます。

SELECT Name,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(e.Name=p.Name AND p.Name %STARTSWITH 'A')
ORDER BY Name
SELECT Name,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(e.Name=p.Name OR  p.Name %STARTSWITH 'A')
ORDER BY Name

以下の例では、FOR SOME は、Sample.Person テーブルから、その Name フィールド値が Sample.Employee テーブル内の Name フィールド値と一致し、その人の住居の状態 (Home_State) がその人のオフィスの状態 (Office_State) と同じであるすべてのレコードを返します。

SELECT Name,Home_State,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(p.Name=e.Name AND p.Home_State=e.Office_State)
ORDER BY Name

複数のテーブル

fieldcondition の前に、複数のテーブルをコンマ区切りリストとして指定できます。レコードを返すかどうかを決定する条件では、データの選択元のテーブルを参照できるほか、別のテーブルのフィールド値を参照することもできます。指定する各フィールドとそのテーブルを関連付けるために、通常はテーブルのエイリアスが必要となります。

以下の例では、Sample.Person テーブル内と Sample.Employee テーブル内とで 1 つ以上の Name が一致すれば、すべてのレコードを返します。1 つ以上のレコードでこの条件が True であるため、すべての Sample.Person レコードが返されます。

SELECT Name AS PersonName,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE FOR SOME (Sample.Employee AS e,Sample.Person AS p) (e.Name=p.Name)
ORDER BY Name

以下の例では、Sample.Person テーブル内と Sample.Company テーブル内とで 1 つ以上の Name が一致すれば、すべてのレコードを返します。個人名と企業名が (このデータ・セット内では) 同じにはならないため、この条件はどのレコードでも True にはなりません。したがって、Sample.Person レコードは返されません。

SELECT Name AS PersonName,Age,COUNT(Name) AS NameCount
FROM Sample.Person
WHERE FOR SOME (Sample.Company AS c,Sample.Person AS p) (c.Name=p.Name)
ORDER BY Name

関連項目

FeedbackOpens in a new tab