在 PostgreSQL 中连接具有两个条件或两个共同列的表

Join tables with two conditions or two columns in common in PostgreSQL

我有两张桌子。 Table 1 具有商店中所有商品的商品、颜色和尺寸。 Table 2 是一个价目表,有商品、尺码、价格和商品编号。价格由商品和尺寸决定。我怎样才能把价格调到 Table 1?

Table1- 例子

item color size
shirt red M
pants blue S

...

Table2- 例子

item size price item_size_id
shirt S 2.99 013443
shirt M 3.99 013444
shirt L 4.99 013445
pants S 5.99 013452

...

想要的结果:

item color size price
shirt red M 3.99
pants blue S 5.99

...

我试过:

SELECT item, color, size, price
FROM table1
LEFT JOIN table2
ON table1.item = table2.item AND table1.size = table2.size

但这会导致价格全部为空。

我已经尝试过 CASE WHEN 语句,虽然这行得通,但它花了很长时间,所以有更好的方法吗?

你的查询是正确的,只是两个表中都存在同名的列,而且你没有指定你指的是哪一个。
请参阅下面的 dbFiddle 行以了解架构和测试。

 /* query provided in the question as provided */
SELECT item, color, size, price
FROM table1
LEFT JOIN table2
ON table1.item = table2.item AND table1.size = table2.size
ERROR:  column reference "item" is ambiguous
LINE 2: SELECT item, color, size, price
               ^
/* query provided with table identifiers added */
SELECT table1.item, table1.color, table1.size, table2.price
FROM table1
LEFT JOIN table2
ON table1.item = table2.item AND table1.size = table2.size
item  | color | size | price
:---- | :---- | :--- | ----:
pants | blue  | S    |  5.99
shirt | red   | M    |  3.99

db<>fiddle here