我正在尝试仅在表选择中的所有列对第二个表中的给定键具有相同值时才输出select语句。
以下是示例:
下面的“规则”表格对应每个规则都具有相同的值(名称,年龄)。但是,“状态”值会随“规则”表中的每一行(True / False)而变化。
我希望能够从表'Rule'中选择,其中表'Hash'中的ruleid等于表'Rule'中的'ruleid',并且只有当所有选中的'state'时才写入输出来自'Hash'的'ruleid'的值等于'Hash'表中该ruleid的'state'值。
以下是示例输出的样子:
ruleid name age col2
27488 Bob 99 xx // output because all the rows In Table Rule with ruleid=27488 have state=False
27455 Sue 23 xx // output because all the rows in Table Rule with ruleid=27455 have state=True
27444 Tim 34 xx // output because all the rows in Table Rule with ruleid=27444 have state=False
下面的示例表'Hash'有一行,其中ruleid 27460有state ='True'。表'Rule'(下面)的行包含相同的'ruleid'和'state'值,除了一行 - 因此没有输出。 如果'ruleid'的'Rule'中的所有行与Hash中的'state'具有相同的值,则输出应该是该'ruleid'行的一行。
哈希
+-------------+--------------+------------+-------+
| ruleid | state | colx | col2 |
+-------------+--------------+------------+-------+
| 27488 | False | XXX | XX |
| 27455 | True | XXX | XX |
| 27460 | True | XXX | XX |
| 27444 | False | XXX | XX |
+-------------+--------------+------------+-------+
规则
+-------------+--------------+------------+-------+
| ruleid | state | name | age |
+-------------+--------------+------------+-------+
| 27488 | False | Bob | 99 |
| 27488 | False | Bob | 99 |
| 27460 | True | Randy | 11 |
| 27460 | True | Randy | 11 |
| 27460 | False | Randy | 11 |
| 27455 | True | Sue | 23 |
| 27455 | True | Sue | 23 |
| 27455 | True | Sue | 23 |
| 27444 | False | Tim | 34 |
| 27444 | False | Tim | 34 |
| 27444 | False | Tim | 34 |
| 27444 | False | Tim | 34 |
+-------------+--------------+------------+-------+
答案 0 :(得分:2)
select distinct r.ruleid,
r.name,
r.age,
h.col2
from hash h
join rule r on r.ruleId = h.ruleId
where not exists
(
select 1
from rule rr
where rr.ruleId = h.ruleId
and rr.state <> h.state
)