2016-04-04 15 views
0

私は注文のデータベースを持っています。その詳細は多くのテーブルに保持されています。注文、注文アイテム、顧客、製品、製品_アイテム、メモ。各注文には、customersテーブルとproductsテーブルに1つの関連エントリがあり、products_itemsテーブルには少なくとも1つのエントリがあります。 notesテーブルで注文のエントリがある場合とない場合があります。MYSQL - 関連するテーブルにエントリがあるかどうかを調べる効率的な方法

私は、配列を作成していたから注文データを取得するために、次のクエリを持っている: -

SELECT * FROM orders o 
INNER JOIN order_items oi ON oi.order_id = o.order_id 
INNER JOIN customer c ON o.customer_id = c.customer_id 
INNER JOIN product p ON oi.product_id = p.product_id 
INNER JOIN product_item pi ON pi.product_item_id = oi.product_item_id 

私は各注文項目の個別の行を作成し、それが必要なので、これは動作します。私が効率的にやっていないのは、注文に関連するメモがあるかどうかを調べることです。サブクエリを使用すると、非常に非効率的(1000以上のオーダーが存在する可能性が高い)になり、JOINを使用すると、オーダーアイテムは、オーダーに関連付けられた複数のノートがある場合に複製されます。ノートがあるかどうかを調べるにはどうすればよいですか?

ご協力いただきまして誠にありがとうございます。

+0

..あなたは何を期待していますか?ノートが返されていない行はありませんか? – Mihai

+0

注文にメモがあるかどうかを知るだけで、実際のメモを取り出す必要はありません。 – Jules

+0

あなたはメモなしで注文を受けたいのですか?テーブルにヒットせずに存在するかどうかを確認することはできません – Mihai

答えて

0

私はnotesが、それは1ですので、別のテーブルにあると仮定しています:Nとidがnote_idと呼ばれていること。

select * from 
(
SELECT distinct(o.order_id) FROM 
orders o, order_items oi, customer c, product p, product_items as pi, notes as n 
where o.order_id = oi.order_id 
and o.note_id = n.note_id 
and o.customer_id = c.customer_id 
and p.product_id = oi.product_id 
and p.product_id = oi.product_id 
) as q, 
order ord 
where q.order_id = ord.order_id 
関連する問題