2 つのテーブルがDocument
あり、以下のようにDocumentField
定義されています。
ドキュメント(簡潔にするために関連する列のみ):
DocumentKey - char(36)
DocTypeKey - char(36)
ドキュメントフィールド:
DocumentKey - char(36)
FieldId - varchar(10)
FieldValue - varchar(255)
DocumentKey
値は標準のDocTypeKey
GUID です。FieldId
主に 1 から 30 までの数値の文字列値です (他にも数値以外の値がいくつかあるため、varchar
列になっています)。FieldValue
は単なる文字列値であり、何でもかまいません。
のサンプル データは次のDocument
ようになります。
DocKey | DocTypeKey
A | X
B | Y
C | Z
のサンプル データは次のようにDocumentField
なります。
DocKey | FieldId | FieldValue
A | 1 | PO1234
A | 2 | INV1234
B | 1 | PO5678
B | 2 | INV5678
C | 1 | PO1234
C | 2 | INV2345
私が実行しようとしているクエリは次のとおりです。
SELECT *
FROM Document
INNER JOIN DocumentField ON Document.DocumentKey = DocumentField.DocumentKey
WHERE (DocTypeKey IS NOT NULL) AND (FieldId = '1' AND FieldValue LIKE 'PO1%') AND (FieldId = '2' AND FieldValue LIKE 'INV1%')
AND (FieldId = '2' AND FieldValue LIKE 'INV%')
しかし、その部分を追加しても結果が得られません。WHERE (DocTypeKey IS NOT NULL) AND (FieldId = '1' AND FieldValue LIKE 'PO%')
最初の部分だけでうまく機能します。上記のサンプルデータを考えると、私はそれを返したいと思います:
DocKey | DocTypeKey
A | X
探している結果を簡単に得る方法はありますか?