2017-09-01 29 views
1

在搜索中很難傳達此問題以找到我需要的內容。看起來這應該很簡單,但我還沒有受過良好的SQL教育。我所擁有的是3個表格,我將它們連接在一起,將所有參數與作業ID鏈接起來。從那裏,我想返回Job.ID,如果2參數與下面的標準找到。當兩個不同的行滿足我的要求時返回共享列值

這裏的表是什麼樣子的例子,下面的條件:

Table1: Job 
Id | Name | ContextId 
1 | Test1 | 1111 
2 | Test2 | 2222 
3 | Test3 | 3333 

Table2: Job2Param 
ContextId | ParamId 
1111 | 120 
1111 | 140 
1111 | 160 
2222 | 220 
2222 | 240 
3333 | 300 

Table3: Param 
ParamId | Name | Value 
120 | User | [email protected] 
140 | Pwd | [email protected] 
160 | Var | Null 
220 | User | [email protected] 
240 | PW | passw0rd123 
300 | non | eek 

***MASTER TABLE: ALL JOINED *** 
Id | Name | ContextId | ParamId | Name | Value 
1 | Test1 | 1111 | 120 | User | [email protected] 
1 | Test1 | 1111 | 140 | Pwd | [email protected] 
1 | Test1 | 1111 | 160 | Var | Null 
2 | Test2 | 2222 | 220 | User | [email protected] 
2 | Test2 | 2222 | 240 | PW | passw0rd123 
3 | Test3 | 3333 | 300 | non | eek 

我試圖做到的是...... 對於每一個不同的J.Id:

  • 如果任何P.Value像 '%@gmail.com'
  • 和在( '密碼', '密碼', 'PW')
任何其他P.Name

所以我想要的結果是作業ID#1 & 2,因爲它們都有一個包含@ gmail.com的參數值,並且都有一個包含與密碼相似的東西的不同參數名稱。

我該怎麼辦?

+0

我的回答有幫助嗎? – grim

回答

0
SELECT DISTINCT C.ID 

    FROM (SELECT B.CONTEXTID 
      FROM PARAM  A 
      , JOB2PARAM B 
     WHERE A.NAME IN ('Password', 'Pwd', 'PW') 
      AND B.PARAMID = A.PARAMID 
     ) A 

    , (SELECT B.CONTEXTID 
      FROM PARAM  A 
      , JOB2PARAM B 
     WHERE A.VALUE LIKE '%@gmail.com' 
      AND B.PARAMID = A.PARAMID 
     ) B 

    , JOB C 

WHERE B.CONTEXTID = A.CONTEXTID 
    AND C.CONTEXTID = B.CONTEXTID 
; 
相關問題