我试图使用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返回订单商品0001
和0001-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声明有关,我认为这是宣告它的正确方法,但我猜不是,任何帮助都会受到赞赏。
答案 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查询运行得更快。