简体   繁体   中英

Join self-join table with another table

I have two tables: products and meta.

Products table:

+----+----------+
| id | name     |
+----+----------+
|  1 | TV       |
|  2 | Computer |
|  3 | Freezer  |
+----+----------+

Meta table:

+----+------------+-----------+------------+
| id | product_id | meta_key  | meta_value |
+----+------------+-----------+------------+
|  1 |          1 | currency  | USD        |
|  2 |          1 | price     | 1100       |
|  3 |          2 | currency  | PLN        |
|  4 |          2 | price     | 9300       |
|  5 |          3 | currency  | USD        |
|  6 |          3 | price     | 1200       |
+----+------------+-----------+------------+

now the following query works fine:

select price.product_id, products.name, price.meta_value as 'price', currency.meta_value as 'currency' 
from meta as price
join meta as currency on(price.product_id=currency.product_id and currency.meta_key='currency')
join products on(products.id=price.product_id)
where price.meta_key='price';

result:

+------------+----------+-------+----------+
| product_id | name     | price | currency |
+------------+----------+-------+----------+
|          1 | TV       | 1100  | USD      |
|          2 | Computer | 9300  | PLN      |
|          3 | Freezer  | 1200  | USD      |
+------------+----------+-------+----------+

but the query:

select price.product_id, products.name, price.meta_value as 'price', currency.meta_value as 'currency' 
from meta as price, meta as currency
join products on(products.id=price.product_id)
where
    price.product_id=currency.product_id
    and price.meta_key='price'
    and currency.meta_key='currency';

returns: "Unknown column 'price.product_id' in 'on clause'"

Why does that happen ?

Your "from" clause is interpreted as:

from meta as price, (meta as currency join products on (products.id = price.product_id)

So, there is no price.product_id available to the on clause, as it only knows about the meta as currency and products tables.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM