|
mysql если не сработало одно условие, тогда другое условие | ☑ | ||
---|---|---|---|---|
0
D_Pavel
08.09.15
✎
13:55
|
Нужно сделать такой запрос, который проверяет одно условие, и если оно ложь, тогда проверяет другое. Пример:
SELECT * FROM kladr WHERE city='Москва' ELSE WHERE phone='113-321' то есть в примере если не нашли запись по городу, то ищем по номеру телефона. А теперь самое главное: Как это сделать? |
|||
1
ДенисЧ
08.09.15
✎
13:56
|
select * from kladr where city='москва'
union all select * from kladr where city<>'москва' and phone='123-456' |
|||
2
Ёпрст
08.09.15
✎
13:59
|
или через case в условии
|
|||
3
kosts
08.09.15
✎
13:59
|
(0)
А так?
|
|||
4
D_Pavel
08.09.15
✎
14:00
|
(1) Так не пойдет. Выберет и то, и другое если есть.
(3) Аналогично. |
|||
5
ДенисЧ
08.09.15
✎
14:01
|
(4) тогда приведи пример на даннызх
|
|||
6
D_Pavel
08.09.15
✎
14:02
|
(2) в case нельзя применить like:
SELECT * FROM kladr WHERE city LIKE '%Москва%' ELSE WHERE phone LIKE '%113-321%' |
|||
7
Принт
08.09.15
✎
14:03
|
city='Москва' or city<>'Москва' and phone='113-321'
|
|||
8
D_Pavel
08.09.15
✎
14:03
|
(5) Ставрополь 113-321
Москва 5646-654 Должна выбраться только вторая строка |
|||
9
ДенисЧ
08.09.15
✎
14:04
|
(8) с чего бы? Под твоё условие в (0) твой ответ не подходит
|
|||
10
b_ru
08.09.15
✎
14:04
|
SELECT * FROM kladr WHERE city LIKE '%Москва%' OR (phone LIKE '%113-321%' AND not (city LIKE '%Москва%'))
|
|||
11
Принт
08.09.15
✎
14:05
|
(9) Он сам не знает чего хочет.
|
|||
12
ДенисЧ
08.09.15
✎
14:05
|
(11) Я ему это пытаюсь намекнуть...
Пока не доходит... |
|||
13
kosts
08.09.15
✎
14:08
|
(8) Тогда надо соединение
(11) Возможно целиком по таблице имеет ввиду |
|||
14
Ёпрст
08.09.15
✎
14:16
|
(6) еще как можно
|
|||
15
Принт
08.09.15
✎
14:17
|
Мб добавить приоритет и брать максимальное?
|
|||
16
Ёпрст
08.09.15
✎
14:17
|
если по вспей таблице, то интерсект того, что в (1)
|
|||
17
D_Pavel
08.09.15
✎
17:09
|
(9) Подходит. Это под условие которое у тебя в голове он не подходит.
|
|||
18
D_Pavel
08.09.15
✎
17:10
|
(11) По себе не суди. Я знаю чего хочу.
|
|||
19
D_Pavel
08.09.15
✎
17:12
|
(12) Сам сначала разберись чтобы мне намекать. Похоже Ёпрст - единственный кто понял вопрос.
|
|||
20
D_Pavel
08.09.15
✎
17:14
|
(14) как это сделать?
|
|||
21
Garykom
гуру
08.09.15
✎
17:16
|
как я люблю любителей запросов в цикле...
|
|||
22
ДенисЧ
08.09.15
✎
17:16
|
(18) Может, и знаешь, но страдаешь собачьей болезнью.
|
|||
23
Garykom
гуру
08.09.15
✎
17:17
|
а вообще сложно в 1 добавить DISTINCT ?
|
|||
24
D_Pavel
08.09.15
✎
17:17
|
(21) А я люблю любителей писать не по теме.
|
|||
25
Ненавижу 1С
гуру
08.09.15
✎
17:18
|
SELECT TOP 1
... ORDER BY CASE WHEN city='Москва' THEN 1 WHEN phone='113-321' THEN 2 ELSE 100500 END |
|||
26
D_Pavel
08.09.15
✎
17:21
|
(25) вроде сгодится
|
|||
27
Garykom
гуру
08.09.15
✎
17:23
|
(24) вообще то четко по теме
select DISTINCT * from (select * from kladr where city='москва' union all select * from kladr where city<>'москва' and phone='123-456') |
|||
28
Ёпрст
08.09.15
✎
17:24
|
ну, тип того
where case when city like '%Москва%' then 'вася' when phone like '%113-321%' then 'вася' else 'маша' end = 'вася' |
|||
29
D_Pavel
08.09.15
✎
17:55
|
(27) Разве выберет только вторую строку из (8)?
|
|||
30
D_Pavel
08.09.15
✎
17:55
|
(28) сам понял уже, но все равно спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |