У меня есть три столбца в таблице:
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;
Надеюсь, я понятно объяснил. Короче говоря, выбрать из моей таблицы записи с score = 1, и если такой записи нет, то вернуть запись, где status = 2, а если есть несколько записей со status = 2, то вернуть запись с максимальным значением для No. где status = 2 (если вообще нет записей со status = 2, то вернуть пусто).
Как написать это в одном запросе? Это должно быть хорошим учебным опытом для меня. А то я знаю, что нужно разбивать на более мелкие запросы и запускать каждый из них. А с хранимыми процедурами я сейчас не могу...
Edit: На самом деле в моем запросе будет еще несколько пунктов WHERE, но одинаковых в обоих условиях, поэтому я их опустил. Следовательно, что касается первого условия, то пока будет возвращена только одна запись. То есть SELECT * FROM table WHERE score = 1
вернет только одну строку. И мне нужны / я приму ответы, которые дают такое решение тоже. Но дело в том, что никогда не знаешь, может быть в будущем, с некоторыми изменениями в дизайне, может быть больше строк с score = 1
. Вот почему я выбрал records вместо record. Но в идеале бизнес-логика должна иметь все записи с score = 1
. На данный момент запись подойдет. Я просто думаю, что запрос будет намного проще, если будет возвращаться только одна строка, и мои товарищи по команде смогут легко усвоить код.
Последнее обновление: Спасибо всем, ребята, вы были очень добры :) Многие ответы сработали хорошо, и выбрать один действительно очень сложно. Мои выводы по ответам:
Ответы, которые работали всегда: @GordonLinoff's, @ZaneBiens's, @ZaneBien's another, @Scen's, @JulienCh. 's (последние 3 по сути одинаковые, но я не совсем понимаю, как они работают :))
Ответы, которые работали только тогда, когда первое условие score = 1
возвращало только один ряд: @HannoBinder's, @ShlomiNoach's, @DaniellePaquette-Harvey's. На данный момент я буду придерживаться варианта @Danielle (который чертовски прост) и позже вернусь, если возникнет необходимость иметь более одного ряда)
Остальные ответы я не смог проверить, так как они были либо не очень конкретными, либо не связанными с MySQL.
Ответ @MatthewPK's не уместен в данном контексте.
Присудить вознаграждение и принять ответ сложно при таком количестве правильных ответов. Я выбрал этот, так как посчитал его более эффективным и читаемым, но я приму ответ @Scen'а за простоту.