2015-07-09 3 views
1

У меня есть таблица и условие для соответствия подстроке/целому значению двух столбцов.SQL-запрос для обновления строк на основе пользовательского условия

таблица образец, как показано ниже

Table1:

id   id1 id2    id3  id4 
18499  18499 8001480043398 datarow1a datarow1a 
18497  18497 8000900121777 datarow1a datarow1a 
18495  18495 8024180001901 datarow1b datarow1b 
18493  18493 8001480070530 datarow1c something1c 
18573  18573 8001480007703 datarow1b datarow1b 

Образец запроса с условием пользователя:

select * 
from table1 
where id3 = id4. 

Результат:

id   id1 id2    id3  id4 
18499  18499 8001480043398 datarow1a datarow1a 
18497  18497 8000900121777 datarow1a datarow1a 
18495  18495 8024180001901 datarow1b datarow1b 
18573  18573 8001480007703 datarow1b datarow1b 

Но то, что я хочу обновлять ate id1 либо минимальному, либо максимальному id в зависимости от требований пользователя. Таким образом, если пользователь выбирает мин, затем id1 строк 1 и 2 должны быть как ниже

id   id1 id2    id3  id4 
18499  18497 8001480043398 datarow1a datarow1a 
18497  18497 8000900121777 datarow1a datarow1a 

и для строк 3 и 4 должно быть

18493  18493 8001480070530 datarow1c datarow1c 
18573  18493 8001480007703 datarow1b datarow1b 

Может кто-нибудь поделиться, как я должен подойти к этому?

PS: Я не знал, как подойти с использованием запросов, поэтому не могу дать никаких образцов. База данных я использую не имеет полное внешнее соединение (в случае, если эта информация полезна)

+0

Какую версию, какую базу данных вы с помощью? – Abecee

+0

@Abecee Я использую Phoenix 4.3.1, используемый над HBASE. – Satya

+0

Вы, вероятно, должны пометить соответственно ... – Abecee

ответ

0

Для Макс:

UPDATE table_1 
SET id1 = (SELECT Max(id1) 
      FROM table_1 t2 
      WHERE table_1.id3 = t2.id3) 
WHERE id3 = id4 

Для Мин:

UPDATE table_1 
SET id1 = (SELECT Min(id1) 
      FROM table_1 t2 
      WHERE table_1.id3 = t2.id3) 
WHERE id3 = id4 
+0

@ Heshie Jakobovits Спасибо за ваш ответ. Могу ли я узнать, как его преобразовать, используя команду «upsert», поскольку в используемой мной базе данных нет установленной команды. – Satya

+0

Просто посмотрев на [Феникс-грамматику] (https://phoenix.apache.org/language/), я бы попробовал что-то вроде 'UPSERT INTO table_1 AS t1 (id1, id3, id4) SELECT MAX (t2.id1) , t2.id3, t2.id4 FROM table_1 AS t2 WHERE t1.id3 = t2.id3 И t1.id4 = t2.id4 И t2.id3 = t2.id4'. В качестве альтернативы, я бы подумал о создании 'VIEW' (или по одному для' MIN' и 'MAX') для' SELECT'. Если это тоже не сработает, есть еще возможность получить значения и 'UPSERT INTO table_1 (id1, id3, id4) VALUES (min_or_max_value_for_id1, id3_value, id4_value)'. - Извините, нет доступа к установке, чтобы проверить себя. – Abecee

Смежные вопросы