我有兩張表,Document
和DocumentField
定義如下。SQL SELECT查詢幫助
文獻(相關的數據列僅出於簡潔):
DocumentKey - char(36)
DocTypeKey - char(36)
DocumentField:
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
有一個簡單的方法可以讓我得到我在尋找的結果?
我應該說明一下。我正在尋找所有具有'DocTypeKey'和BOTH(FieldId ='1'和FieldValue LIKE'PO1%')'AND'(FieldId ='2'和FieldValue LIKE'INV1%')'的文件'。 OR不符合搜索要求。 – Kettch19 2012-07-22 21:48:37
你需要像子選擇一樣。看看下面的答案 - 它會給你你要求的結果。 – 2012-07-22 22:04:40