У меня есть три столбца в таблице:
score status No.
1, 2, 1
0, 1, 2
0, 0, 1
Мне нужно это, чтобы написать псевдо SQL в стиле C #:
rows = empty;
rows = "SELECT * FROM `table` WHERE score = 1"
if (rows.Count > 0) //at least one row
return rows;
rows = "SELECT * FROM `table` WHERE status = 2"
if (rows.Count > 1) //more than one row
return row with MAX(No.) from rows; //ie MAX(No.) where status = 2
return rows;
Я надеюсь, что смогу быть ясным. Короче говоря, выберите из моей таблицы записи с счетом = 1, и, если такой записи нет, верните запись, где статус = 2, и если существует более одной записи с состоянием = 2, то верните запись с максимальным значением. для №, где статус = 2 (если вообще нет записи со статусом = 2, вернуть пусто).
Как мне написать это в одном запросе? Это должно быть хорошим опытом обучения для меня. В противном случае я знаю, чтобы разбить на более мелкие запросы и запустить каждый. И я не могу сейчас пойти с хранимыми процедурами ..
Редактировать: На самом деле в моем запросе будет еще несколько предложений WHERE, но они идентичны в обоих условиях, поэтому я и опустил его. Следовательно, что касается первого условия, на данный момент будет возвращена только одна запись. То есть SELECT * FROM table WHERE score = 1
покажет только одну строку. И мне нужно / я приму ответы , что тоже дает такое решение. Но дело в том, что вы никогда не знаете, может быть, в будущем с некоторыми изменениями дизайна, может быть больше строк с score = 1
. Вот почему я пошел на записей вместо записи . Но в идеале бизнес-логика должна иметь все записи с score = 1
. На данный момент сделаем запись. Я просто думаю, что запрос будет намного проще, если будет возвращена только одна строка, и мои товарищи по команде смогут легко усвоить код.
Окончательное обновление : Спасибо всем, ребята, вы были очень любезны :) Многие ответы сработали хорошо, и выбор одного действительно ужасен. Моя находка по ответам:
Ответы, которые работали всегда: @ GordonLinoff's , @ ZaneBiens's , @ еще один ZaneBien , @ Scen's , @JulienCh .'s (последние 3 по существу одинаковы, но я пока не до конца осознаю, как они работали:))
Ответы, которые работали только тогда, когда первое условие score = 1
вернуло только одну строку: @ HannoBinder's , @ ShlomiNoach's , @ DaniellePaquette-Harvey's . На данный момент, я буду придерживаться @ Danielle's (что чертовски просто) и позже вернусь, если возникнет необходимость иметь более одной строки)
Остальные ответы я не смог проверить, поскольку они либо не очень специфичны, либо не связаны с MySQL.
@ MatthewPK не подходит в контексте.
Присуждение награды и принятие ответа сложно с таким количеством правильных ответов. Я выбрал этот , так как чувствовал, что он, вероятно, более эффективен и удобен для чтения, но я приму ответ Scen's за то, что он совершенно простой.