首页 > 解决方案 > 如何使用内部连接查询和 where like 子句从表 Produto_precos 中获取另外两个值

问题描述

我有两张桌子,ProductProduct_prices。对于每种产品,我有三种类型的价格(ebook(0)impress(1)combo(2)。我想加入这两个表并获得该项目的三种价格。当我执行子句时WHERE prices1_.value like '%1%'

表产品

------------------------------------------------
id 描述 页面标题
------------------------------------------------
1 哈利波特 230 哈利波特
2 指环王 950 指环王
3 权力的游戏 980 权力的游戏

表 Product_prices

------------------------------------------------
Product_id bookType 值
------------------------------------------------
1 0 20.40
1 1 28.00
1 2 40.00
2 0 15.00
2 1 25.50
2 2 42.00
3 0 21.00
3 1 30.50
3 2 47.00

这是关于休眠的查询:

    选择
    清楚的
    product0_.id 为 id1_0_,
    product0_.description 作为descript3_0_,
    product0_.pages 作为 pages4_0_,
    product0_.title 为 title6_0_,
    价格 1_.Product_id 为 Product_1_1_0__,
    price1_.bookType 作为 bookType2_1_0__,
    价格1_.value 作为 value3_1_0__
    来自产品 produto0_
    在 product0_.id=prices1_.Product_id 上的内部连接 ​​Product_prices prices1_ where lower(product0_.title) like '%1%'
    或prices1_.bookType = 0 和price1_.value 像'%1%'
    或prices1_.bookType = 1 和price1_.value 像'%1%'
    或prices1_.bookType = 2 和price1_.value 像'%1%'

我希望得到以下结果或只有一行包含每个产品的三个值:

------------------------------------------------
id 描述 页面标题 Product_id bookType 值
-------------------------------------------------- ---------------
2 指环王 950 Lord of... 2 0 15.00
2 指环王 950 Lord of... 2 1 25.00
2 指环王 950 Lord of... 2 2 42.00
3 权力的游戏 980 游戏... 3 0 21.00
3 权力的游戏 980 游戏... 3 1 30.50
3 权力的游戏 980 游戏... 3 2 47.00

但我只有以下结果:

------------------------------------------------
id 描述 页面标题 Product_id bookType 值
-------------------------------------------------- ---------------
2 指环王 950 Lord of... 2 0 15.00
3 权力的游戏 980 游戏... 3 0 21.00

标签: mysqlsqlhibernate

解决方案


提醒我,以下问题的哪一部分未能解决......

DROP TABLE IF EXISTS product;

CREATE TABLE product
(id SERIAL PRIMARY KEY
,title VARCHAR(30) NOT NULL
,pages INT NOT NULL
);

INSERT INTO product VALUES
(1,'Harry Potter',230),
(2,'Lord of the Rings',950),
(3,'Game of Thrones',980);

DROP TABLE IF EXISTS prices;

CREATE TABLE prices
(product_id INT NOT NULL
,book_type INT NOT NULL
,price DECIMAL(5,2) NOT NULL
,PRIMARY KEY(product_id,book_type)
);

INSERT INTO prices VALUES
(1,0,20.40),
(1,1,28.00),
(1,2,40.00),
(2,0,15.00),
(2,1,25.50),
(2,2,42.00),
(3,0,21.00),
(3,1,30.50),
(3,2,47.00);

SELECT c.*
     , a.*
  FROM prices a
  JOIN prices b
    ON b.product_id = a.product_id
  JOIN product c
    ON c.id = b.product_id
 WHERE b.price LIKE '%1%';
+----+-------------------+-------+------------+-----------+-------+
| id | title             | pages | product_id | book_type | price |
+----+-------------------+-------+------------+-----------+-------+
|  2 | Lord of the Rings |   950 |          2 |         0 | 15.00 |
|  2 | Lord of the Rings |   950 |          2 |         1 | 25.50 |
|  2 | Lord of the Rings |   950 |          2 |         2 | 42.00 |
|  3 | Game of Thrones   |   980 |          3 |         0 | 21.00 |
|  3 | Game of Thrones   |   980 |          3 |         1 | 30.50 |
|  3 | Game of Thrones   |   980 |          3 |         2 | 47.00 |
+----+-------------------+-------+------------+-----------+-------+

推荐阅读