2016-10-18 7 views
0

異なるメニューの名前に基づいて両方のテーブルから選択する方法はありますが、データはPSQLでほとんど同じですか? 私はpsqlコマンドからselectとreplaceを使用しようとしました。PSQLの選択と置換

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

表米国

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

テーブルEU

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

価格と味の評価のための追加の列がありますが、これは問題の要点であるため含まれていません。私は私たちのテーブルからタイプを選択し、最後の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 
関連する問題