Я хочу выполнить следующий запрос, как его реализовать?Оператор SQL if в выражении WHERE
SELECT * FROM table WHERE routeNum LIKE 'N10%'
-->if no rows return, WHERE clause change to routeName LIKE '&something%'
Я хочу выполнить следующий запрос, как его реализовать?Оператор SQL if в выражении WHERE
SELECT * FROM table WHERE routeNum LIKE 'N10%'
-->if no rows return, WHERE clause change to routeName LIKE '&something%'
Я думаю, что это будет работать для вас:
WITH CTE AS (
SELECT 2 AS 'INDEX', * FROM table WHERE routeNum LIKE 'N10%'
UNION ALL
SELECT 1 AS 'INDEX', * FROM table WHERE routeNum LIKE '&something%'
)
SELECT *
FROM CTE
WHERE CTE.INDEX = (SELECT MAX(INDEX) FROM CTE)
Как вы должны выбрать между двумя наборами результатов, то вам нужно два запроса, который будет возвращать два различных набора, а затем, на основе 'index', который соответствует запущенному запросу, вы выбираете, как отображать результаты.
Демо-версия: SQLFiddle.
ЭТО РАБОТАЕТ, СПАСИБО! – user2761885
WITH tmp AS
(
SELECT t.*,
CASE
WHEN routeNum LIKE 'N10%' THEN 1
WHEN routeNum LIKE '&something%' THEN 2
ELSE 3 END AS q
FROM table t
)
SELECT * FROM tmp t
WHERE q = CASE WHEN (SELECT COUNT(*) FROM tmp WHERE q = 1) > 0 THEN 1 ELSE 2 END
Возможное решение
WITH cte AS
(
SELECT *
FROM routes
WHERE routeNum LIKE 'N10%'
)
SELECT * FROM cte
UNION ALL
SELECT * FROM routes
WHERE routeNum LIKE 'something else%'
AND NOT EXISTS
(
SELECT *
FROM cte
)
Вот SQLFiddle демо
вы хотите использовать сазе, проверить этот форум или Google для заявления SQL Дело в том, где п –
@user .. можете ли вы продлить свое требование? –
@ пользователь .. вы используете mysql или sqlserver? –