我的表像,选择此:MySQL的 - 只有当所有的组都为空
ID|EID|priority|completed_forms|all_forms_in
1 |78 |NULL |y |y
2 |24 |NULL |y |y
3 |78 |1 |y |y
我想要完成的任务: 只选择行,如果他们都有着相同的EID
和所有共享NULL的优先级,并为completed_forms和all_forms_in标记为'y'。
我已经试过:这是我目前的select语句:
SELECT * FROM tasks
WHERE priority IS NULL AND EID in
(
SELECT * FROM
(select EID from tasks
WHERE completed_form = 'y' AND all_forms_in = 'y') as priority_check
GROUP BY EID having count(*) = 2
)
预期结果: 我想这不返回行,因为选择应确保返回只有两行是NULL。在这种情况下,ID 1和ID 3不能共享NULL。相反,它返回ID 1.
为什么不应该与ID = 2行返回? EID必须有2行或更多'priority = NULL'? –
在此示例中,它必须恰好为2(GROUP BY EID的count(*)= 2)。由于EID = 24只有1个计数,因此不应退回。它应该看到的只有两行是1和3.但它不应该选择任何东西,除非它们都具有NULL优先级。 – osakagreg
你能提供SqlFiddle吗? –