1

我正在尝试使用 LIKE 而不是使用 JOINS 在不同表之间匹配 id,这是必要的,因为以下情况

我有 2 个表,第一个称为 order,第二个称为 order_items。

对于每个订单,可以有多个订单项目,因此例如典型的表值可能如下所示...

Table orders

id      sell_price       buy_price
0001    50               20


Table order_items 

id      sell_price       buy_price
0001-1  30               15
0001-2  20               5

我尝试创建一个查询,该查询将能够0001使用 LIKE 返回订单项目0001-10001-2.

SELECT 
o.id AS order_id, 
oi.id AS order_item_id,
oi.sell_price AS order_item_sell_price, 
oi.buy_price AS order_item_buy_price  
FROM orders o, order_items oi 
WHERE oi.id LIKE o.id + '%' 
ORDER BY o.purchase_date DESC

不返回任何结果!

问题似乎与 LIKE 语句有关,我认为这是声明它的正确方法,但我想不是,任何帮助将不胜感激。

4

2 回答 2

2

尝试使用CONCAT

SELECT 
o.id AS order_id, 
oi.id AS order_item_id,
oi.sell_price AS order_item_sell_price, 
oi.buy_price AS order_item_buy_price  
FROM orders o, order_items oi 
WHERE oi.id LIKE CONCAT(o.id, '%')
ORDER BY o.purchase_date DESC

JOIN如果你愿意,你仍然可以使用:

SELECT 
o.id AS order_id, 
oi.id AS order_item_id,
oi.sell_price AS order_item_sell_price, 
oi.buy_price AS order_item_buy_price  
FROM orders o
JOIN order_items oi on oi.id LIKE CONCAT(o.id, '%')
ORDER BY o.purchase_date DESC

一个简化的 sqlfiddle:http ://sqlfiddle.com/#!2/e6b12/6

于 2013-03-08T22:21:15.230 回答
1

最好将 ORDER 的 ID 从 ORDER_ITEMS 的 ID 移出到 ORDER_ITEMS 中的另一列 ORDER_ID。原因是您可以索引 ORDER_ID 列,这使您的 SQL 查询运行得更快。

于 2013-03-09T15:54:00.137 回答