comms
+-------------+
| uuid |
+-------------+
| comm_uuid_1 |
| comm_uuid_2 |
+-------------+
events
+--------------+-------------+
| uuid | comm_uuid |
+--------------+-------------+
| event_uuid_1 | comm_uuid_1 |
| event_uuid_2 | comm_uuid_1 |
+--------------+-------------+
actions
+---------------+-------+---------------------+
| uuid | type | event_uuid |
+---------------+-------+---------------------+
| random_uuid_1 | stack | event_uuid_1 |
| random_uuid_2 | pop | event_uuid_1 |
+---------------+-------+---------------------+基本上,我试图获得它们的事件符合某些条件的所有通信,但是过滤器在事件的操作中,这是我使用的查询:
SELECT *
FROM comms JOIN events ON events.comm_uuid = comms.uuid
AND (EXISTS (SELECT 1 FROM actions
WHERE events.uuid = actions.event_uuid AND actions.type = 'stack'))
AND (not EXISTS (SELECT 1 FROM actions
WHERE events.uuid = actions.event_uuid AND actions.type = 'pop')) 在本例中,该查询不应该返回任何内容,因为存在actions.type =堆栈的事件,但在与actions.type = pop相同的通信中也存在事件,由于某种原因,这将返回与action.type =堆栈相关的通信,我只希望在同一通信方式的事件中没有action.type = pop。
发布于 2022-05-27 22:35:40
SELECT * FROM comms
WHERE
EXISTS (
SELECT 1 FROM actions
JOIN events on (events.uuid = actions.event_uuid)
WHERE events.comm_uuid = comms.uuid
AND actions.type = 'stack')
AND NOT EXISTS (
SELECT 1 FROM actions
JOIN events on (events.uuid = actions.event_uuid)
WHERE events.comm_uuid = comms.uuid
AND actions.type = 'pop'
)https://stackoverflow.com/questions/72409614
复制相似问题