У меня есть таблица, которая выглядит следующим образом:выберите строки, в которых граф 2 поля больше, чем 1 с, где положение
╔════╦═════════╦═════════╦═══════╗
║ id ║ deleted ║ status ║ ref ║
╠════╬═════════╬═════════╬═══════╣
║ 1 ║ 0 ║ pending ║ 10001 ║
║ 2 ║ 0 ║ paid ║ 10001 ║
║ 3 ║ 0 ║ paid ║ 10001 ║
║ 4 ║ 0 ║ paid ║ 10002 ║
║ 5 ║ 1 ║ pending ║ 10002 ║
║ 6 ║ 1 ║ paid ║ 10002 ║
║ 7 ║ 0 ║ pending ║ 10003 ║
║ 8 ║ 0 ║ paid ║ 10003 ║
║ 9 ║ 0 ║ paid ║ 10003 ║
║ 10 ║ 0 ║ paid ║ 10003 ║
║ 11 ║ 0 ║ pending ║ 10004 ║
║ 12 ║ 0 ║ paid ║ 10004 ║
║ 13 ║ 1 ║ pending ║ 10005 ║
║ 14 ║ 1 ║ paid ║ 10005 ║
║ 15 ║ 1 ║ paid ║ 10005 ║
║ 16 ║ 0 ║ paid ║ 10005 ║
║ 17 ║ 0 ║ pending ║ 10006 ║
║ 18 ║ 0 ║ paid ║ 10006 ║
║ 19 ║ 0 ║ paid ║ 10006 ║
╚════╩═════════╩═════════╩═══════╝
Я пытаюсь написать запрос MySQL, который будет возвращать строки, которые paid
и не deleted
. Но только там, где отсчет paid
больше 1. Таким образом, результат должен быть:
╔════╦═════════╦════════╦═══════╗
║ id ║ deleted ║ status ║ ref ║
╠════╬═════════╬════════╬═══════╣
║ 2 ║ 0 ║ paid ║ 10001 ║
║ 3 ║ 0 ║ paid ║ 10001 ║
║ 8 ║ 0 ║ paid ║ 10003 ║
║ 9 ║ 0 ║ paid ║ 10003 ║
║ 10 ║ 0 ║ paid ║ 10003 ║
║ 18 ║ 0 ║ paid ║ 10006 ║
║ 19 ║ 0 ║ paid ║ 10006 ║
╚════╩═════════╩════════╩═══════╝
Я пытался получить это с помощью следующего запроса, но он не делает то, что мне нужно, и я теперь, кажется, идет по кругу. Может ли кто-нибудь дать мне руку?
SELECT t1.* FROM orders t1 WHERE exists (SELECT * FROM orders t2 where t1.id != t2.id and t1.ref = t2.ref and t1.deleted = 0 and t1.status = 'paid')
Большое спасибо!
[изменить] arrgh! К сожалению, ребята, я забыл сказать, что мне нужно возвращать только те строки, которые имеют более чем 1 paid
статус ... извините ...
Выполняет 'SELECT t1. * FROM orders t1 WHERE t1.status = 'paid' и t1.deleted = 0;' не работает для вас? –
Я отредактировал свой вопрос, так что извините за то, что не заметил это, когда я изначально разместил – SammyBlackBaron