1

JOINSを使用する代わりにLIKEを使用して、異なるテーブル間でIDを一致させようとしています。これは、次のシナリオのために必要です。

2つのテーブルがあります。最初のテーブルはorder、2番目のテーブルは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_ITEMS の ID から ORDER の ID を ORDER_ITEMS の別の列 ORDER_ID に移動することをお勧めします。その理由は、SQL クエリの実行を高速化する ORDER_ID 列にインデックスを付けることができるためです。

于 2013-03-09T15:54:00.137 に答える