我想從一個表中的一些信息,當(一個或多個)條件(S)爲被滿足,但這條件被存儲在其他表。創建複雜查詢以執行存儲在列中的查詢?
下面是3代表的截圖:
所以我需要一個查詢來做到這一點:
- 某個狀態(
IDStatus
)和行動(IDAction
) 如果有一個
IDCondition
(它可以是NULL
個,一個或多於一個)A.如果有一個,則使用
IDocField
作爲來自稱爲IDoc
表中的列,使用ConditionOperator
作爲條件(讀此作爲=
,<
,>
)和ConditionValue
值。B.如果有不止一個,和以前一樣,但使用的每個條件與
AND
。C.如果是
NULL
,直接進入第3點獲取
Subject
,SendTo
,CC
,CCO
,並FileTemplate
匹配所有的以上解釋。
我想試試這個,因爲它會降低我的C#代碼,但如果這是過於複雜或不可信,我會做多個查詢,如我上面所解釋的。
我問這個,因爲我不知道如何讓多個條件在SELECT
。我的意思是這個:
如果有一個以上的情況下,我怎麼能執行它們或讓所有的人都在一個單一的查詢,但有一點對3中的所有返回的東西呢?
例子:
SELECT *
FROM WF_MailCondition
WHERE IDCondition = 1
這將返回所有條件(鍵可以重複),有IDCondition
1。但後來我等於必須使用所有這三個列創建一個像ID = 1
一個條件IDocField
一直ID
,=
在ConditionOperator
和ConditionValue
1
。我知道圖像中存在一些不一致的地方,比如IDCondition
是NN
(不爲空),但我說它可以是空的(我正在修復這個問題)。
我的SQL:
SELECT
Subject, SendTo, CC, CCO, FileTemplate
FROM
WF_Mail AS M
INNER JOIN
WF_MailStatusAction AS S ON S.IDMail = M.IDMail
WHERE
(SELECT "HERE SELECT THE 3 COLUMNS TO USE A CONDITION" FROM WF_MailCondition WHERE IDCondition = S.IDCondition)
AND (S.IDAction = "ACTION FROM OUTSIDE" AND S.IDStatus = "STATUS FROM OUTSIDE")
如何做好SELECT "HERE SELECT 3 COLUMNS..."
如果IDCondition
是NULL
直接將列在第一個SELECT請求(Subject
,SendTo
等。)
的"ACTION FROM OUTSIDE"
是參數化的語句。
忘記外鍵,我們不使用它(老闆的決定...)。
我這樣做,因爲是一個「事件」的事情。我在我的C#代碼中調用一個方法來查看是否有郵件發送。但是這封郵件可能沒有,一個或多個條件。這是有更多選擇比所有必須發送郵件。也許在工作流程中,不需要發送電子郵件,但在代碼中是「硬編碼」的,所以我完全可以自由地做我需要的功能。
也許所有這一切都可以是一個函數或存儲過程,但我對此並表現他們很無知。
如果您需要更多信息,請告訴我。
每當你開始在數據庫中存儲查詢時,如果這真的是一個好主意,你應該退後一步。它可能容易受到sql注入的攻擊,因爲你發現它非常難以使用。 –
是的,我知道,但是要求,我不能改變它,它來自頂端...我說同樣的,但無法改變它:S – matiaslauriti