在 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
我有两张桌子。 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