很难在搜索中传达此问题以找到我需要的内容。看起来这应该很简单,但我还没有受过良好的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:
所以我想要的结果是Job ID#1& 2因为它们都有一个包含@ gmail.com的参数值,并且两者都有一个不同的参数名称,其中包含的内容类似于密码。
我该怎么做?
答案 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
;