Я хочу выполнить операцию обновления, объединив две разные таблицы.
My tables are :
dim_sess
name role
20111012133513aaa123
20110908072611aaa121
20111002210235bbb853
20120113113353bbbl971
Столбец роли обновляется позже.
, а другая таблица -
employeerole
username role thedate
aaa technician 2011-10-12 13:35:13
aaa technician 2011-09-08 07:26:11
bbb day guard 2011-10-02 21:02:35
bbb day guard 2012-01-13 11:33:53
bbb night guard 2012-01-13 21:30:00
Я хочу обновить роль в таблице dim_sess в зависимости от имени пользователя и начальной даты.Один и тот же пользователь может играть разную роль в разные даты.В двух таблицах нет общего столбца, и единственный столбец для выполнения соединения - это «имя» в dim_sess.
Я пишу следующий запрос для обновления таблицы dim_ses.
UPDATE dim_sess
SET role = (SELECT employeerole.role FROM employeerole
WHERE SUBSTRING(dim_sess.name,15,7) = employeerole.username
AND SUBSTRING(dim_sess.name,1,14) = (TEXTCAT( TEXTCAT(TEXTCAT(SUBSTRING(thedate,1,4), SUBSTRING(thedate,6,2)) , TEXTCAT(SUBSTRING(thedate,9,2), SUBSTRING(thedate,12,2)) ), TEXTCAT( SUBSTRING(thedate,15,2), SUBSTRING(thedate,18,2)))))
WHERE SUBSTRING(dim_sess.name,1,21) = (SELECT TEXTCAT((TEXTCAT(TEXTCAT(TEXTCAT(SUBSTRING(thedate,1,4), SUBSTRING(thedate,6,2)) , TEXTCAT(SUBSTRING(thedate,9,2), SUBSTRING(thedate,12,2))), TEXTCAT(SUBSTRING(thedate,15,2), SUBSTRING(thedate,18,2)))) , employeerole.username) AS session FROM employeerole);
The error message I get is:
ERROR: more than one row returned by a subquery used as an expression
Поскольку между двумя таблицами нет общего столбца, я пытаюсь объединить их, используя функцию подстроки для сопоставления результатов.Но это кажется плохим решением.Мне было интересно, есть ли другой способ объединить эти две таблицы.