У меня есть три стола.ВЫБЕРИТЕ все записи, но самые высокие
Page Revision Text
+-----------+-------------+ +-----------+-------------+----------+ +-------------+---------+
| page_id | rev_id | | rev _id | rev_text_id | page_id | | rev_text_id | text |
+-----------+-------------+ +-----------+-------------+----------+ +-------------+---------+
| 1 | 2 | | 1 | 1 | 1 | | 1 | A |
+-------------------------- +------------------------------------+ +-----------------------+
| 2 | 5 | | 2 | 2 | 1 | | 2 | B |
+-------------------------+ +------------------------------------+ +-----------------------+
| 3 | 3 | 2 | | 3 | C |
+------------------------------------+ +-----------------------+
| 4 | 4 | 2 | | 4 | D |
+------------------------------------+ +-----------------------+
| 5 | 4 | 2 |
+------------------------------------+
Мой желаемый результат:
+--------+-------------+
| rev_id | rev_text_id |
+--------+-------------+
| 1 | 1 |
+----------------------+
| 3 | 3 |
+----------------------+
| 4 | |
+----------------------+
Моя цель состоит в том, чтобы найти rev_id-х и rev_text_id, которые могут быть удалены из каждой таблицы в одном запросе. Поскольку таблица ревизий может содержать равные rev_text_id для нескольких изменений, мне нужно исключить rev_text_id, который является самым высоким для каждой страницы (в примере 4 на стр. 2).
я начал баловаться вдоль линий:
SELECT
r.rev_id,r.rev_text_id
FROM revision r, page p, text t
WHERE p.page_id = r.page_id
AND t.rev_text_id = r.rev_text_id
AND p.rev_id != r.rev_id
AND r.rev_text_id not in (
SELECT max(r.rev_text_id)
FROM revision AS r, page AS p
WHERE r.rev_id = p.rev_id
);
Но скачет рекорд rev_id 4 в моем желаемый результат и не включает в себя «нулевые дела» ..
Пожалуйста, покажите текущий запрос SQL –
Рассмотрите возможность создания sqlfiddle одного и того же, и, ради удобства каждого, рассмотрите возможность переименования столбцов на 'rev_id',' page_id' и 'rev_text_id'. – Strawberry
Переименован и возился. –