Я использую следующий запрос:

select a,b,c,d from Table1 where a in ('');

Запрос дает мне следующий вывод:

a    b    c      d
1    A    1e@c   i-1
2    B    #3ht   i-2
3    A    1e@c   Null
4    C    1e@c   

Теперь я хочу применить IF условие к тем записям, где d имеет значение Null или Blank.

Я хочу проверить всю базу данных, могу ли я найти какое-либо значение d, соответствующее значению b или c, и показать его в другом столбце e.

Ожидаемый выход:

a    b    c      d     e
1    A    1e@c   i-1   
2    B    #3ht   i-2
3    A    1e@c   Null  i-1
4    C    1e@c         i-1
0
Roy1245 28 Фев 2018 в 12:47

4 ответа

Лучший ответ

Вы можете использовать выражение CASE с коррелированным подзапросом:

SELECT t1.a, t1.b, t1.c, t1.d,
       CASE 
          WHEN t1.d IS NULL OR t1.d = '' 
          THEN  (SELECT t2.d
                FROM Table1 AS t2
                WHERE t2.c = t1.c LIMIT 1) 
       END AS e 
FROm Table1 AS t1
WHERE t1.a IN (1, 2, 3, 4);

Если у вас более одного совпадения, вы можете использовать LIMIT 1 для произвольного выбора одного из них. В противном случае используйте некоторый предикат, чтобы выбрать нужную совпадающую запись.

Демо здесь

3
Giorgos Betsos 28 Фев 2018 в 10:00

Вы можете использовать SELECT IFNULL(d,'1-1') as e или SELECT IF((d = ''),'1-1','') as e или SELECT IF((d IS NULL) || (d = ''),'1-1','') as e

0
Vikas Chaudhary 28 Фев 2018 в 10:00

Вы можете использовать CASE WHEN "Condition" THEN "do this". В основном это эквивалент оператора if в SQL.

0
user5596920user5596920 28 Фев 2018 в 09:56

Попробуй это:

SELECT A, B, C, D, CASE WHEN D IS NULL OR D='' THEN 'i-1' ELSE '' END AS E
FROM YourTable
0
DineshDB 28 Фев 2018 в 09:54