使用LIKE列值匹配行

时间:2013-03-08 22:18:08

标签: mysql sql

我试图使用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

我尝试使用LIKE返回订单商品00010001-1创建一个能够返回订单0001-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声明有关,我认为这是宣告它的正确方法,但我猜不是,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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