当2个不同的行符合我的要求时返回共享列值

时间:2017-09-01 22:51:03

标签: mysql

很难在搜索中传达此问题以找到我需要的内容。看起来这应该很简单,但我还没有受过良好的SQL教育。我所拥有的是3个表,我将它们连接在一起以将所有参数与Job Ids链接起来。从那里,我想返回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 | Brian@gmail.com  
140 | Pwd | P@ssword  
160 | Var | Null  
220 | User | Peter@gmail.com  
240 | PW | passw0rd123  
300 | non | eek

***MASTER TABLE: ALL JOINED  ***  
Id | Name | ContextId | ParamId | Name | Value  
1 | Test1 | 1111 | 120 | User | Brian@gmail.com  
1 | Test1 | 1111 | 140 | Pwd | P@ssword  
1 | Test1 | 1111 | 160 | Var | Null  
2 | Test2 | 2222 | 220 | User | Peter@gmail.com  
2 | Test2 | 2222 | 240 | PW | passw0rd123  
3 | Test3 | 3333 | 300 | non | eek  

我想要完成的是...... 对于每个不同的J.Id:

  • 如果有任何P.Value喜欢'%@ gmail.com'
  • 和其他任何P.Name('密码',' Pwd',' PW')

所以我想要的结果是Job ID#1& 2因为它们都有一个包含@ gmail.com的参数值,并且两者都有一个不同的参数名称,其中包含的内容类似于密码。

我该怎么做?

1 个答案:

答案 0 :(得分: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
;