2016-10-18 4 views
0

Как выбрать из обеих таблиц на основе имени из разных меню, но данные почти идентичны в PSQL? Я пробовал использовать команду select и replace из psql.PSQL select & replace chars

SELECT * FROM americanmenu JOIN europeanmenu ON replace(usmenu.type, \'US\', \'EU\') = eumenu.type WHERE usmenu.type = eumenu.type  

стол US

ID | type | year 
---------------------- 
01 | wine 1 us | 2001 
02 | wine 2 us | 2002 

стол ЕС

ID | TYPE | year 
-------------------- 
01 | wine 1 eu | 2001 
02 | wine 2 eu | 2002 

Есть дополнительные столбцы для оценок цен и вкуса, которые я не включил, потому что это суть проблемы. Я бы хотел выбрать из таблицы uss по типу и заменить последние 2 символа/строку на «eu» и иметь возможность сравнивать обе таблицы, даже если имеется много одинаковых данных. Благодаря!

ответ

0

Запрос:

t=# SELECT * 
FROM americanmenu a 
JOIN europeanmenu e ON replace(a.type, 'us','eu') = e.type; 
id | type  | year | id | type  | year 
-----+-------------+------+-----+-------------+------ 
01 | wine 1 us | 2001 | 01 | wine 1 eu | 2001 
02 | wine 2 us | 2002 | 02 | wine 2 eu | 2002 
(2 rows) 

Time: 0.297 ms 

Приготовление:

t=# create table americanmenu (id text, type text, year int); 
CREATE TABLE 
Time: 4.515 ms 
t=# create table europeanmenu (id text, type text, year int); 
CREATE TABLE 
Time: 15.218 ms 
t=# copy americanmenu from stdin delimiter '|'; 
Enter data to be copied followed by a newline. 
End with a backslash and a period on a line by itself. 
>> 01 | wine 1 us | 2001 
02 | wine 2 us | 2002>> 
>> \. 
COPY 2 
Time: 7144.563 ms 
t=# copy europeanmenu from stdin delimiter '|'; 
Enter data to be copied followed by a newline. 
End with a backslash and a period on a line by itself. 
>> 01 | wine 1 eu | 2001 
02 | wine 2 eu | 2002>> 
>> \. 
COPY 2 
Time: 9729.000 ms