我遇到了以下问题: 因为条目的数量可能会非常大,所以我想在sql查询中使用连接而不是子选择。
它涉及以下三个简化表:
devices:
- id
confirmation_requests:
- id
- filePath
confirmation
- id
- requestId (references confirmation_requests.id)
- deviceId (references devices.id)
目标是获取所有确认请求,这些请求未由给定设备确认(在确认表中有条目)。
我只是使用普通子查询来找到解决方案,这是您在此处找到的示例: http://sqlfiddle.com/#!2/13fd3/1
SELECT *
FROM confirmation_requests
WHERE id NOT IN (SELECT confirmation_request_id
FROM confirmations
WHERE device_id = 1);
谢谢!
答案 0 :(得分:2)
您可以在表格上LEFT JOIN
进行与device_id = 1
匹配的确认,然后排除WHERE
子句中的确认:
SELECT cr.*
FROM confirmation_requests cr
LEFT JOIN confirmations c ON (cr.id = c.confirmation_request_id AND c.device_id = 1)
WHERE c.id IS NULL;