2016-06-27 17 views
0

2つのテーブルをジョインするためにクエリを実行しようとしていますが、WHERE句をCustomerテーブルで最初に実行する必要があり、その後JOINオペレーションを実行する必要があります。これをする。私は次の2つのオプションを試しましたが、まだ動作していません。最初のものは実行されますが、クエリ結果にレコードはありません。もう1つは実行されず、「JOIN式はサポートされていません」というメッセージが表示されます。メッセージ。しかし、 "AND c.sales_group =" Investor Owned Util ""行を削除すると、その行が実行されます。 sales_group = "Investor Owned Util"のCustomerテーブルからすべてのレコードを取得し、そのクエリからOrdersテーブルでJOINし、各顧客のすべての注文を表示したいとします。 WHERE句を最初に実行する必要があるのは、注文していない顧客と注文した顧客を表示するためです。どんな支援も大歓迎です。LEFT JOINの前にWHEREを実行する

SELECT c.ship_to_party, c.ship_to_name, c.sales_group 
FROM (SELECT * FROM Customer WHERE Customer.sales_group = "Investor Owned Util") AS c 
LEFT JOIN Orders AS o 
ON c.ship_to_party = o.order_ship_to_party 
ORDER BY c.ship_to_name; 

SELECT c.ship_to_party, c.ship_to_name, c.sales_group 
FROM Customer AS c 
LEFT JOIN Orders AS o 
ON c.ship_to_party = o.order_ship_to_party 
AND c.sales_group = "Investor Owned Util" 
ORDER BY c.ship_to_name; 

おかげで、 エリック

+0

「SELECT * FROM Customer WHERE Customer.sales_group = "Investor Owned Util";」を実行するとレコードが取得されますか? – JNevill

+0

タイトルにVBAはどこに記載されていますか? – Parfait

答えて

0

ではなく、あなたのJOINの一部であることのWHERE句にCustomer.sales_group選択基準を移動します。これにより、表示する顧客のセットが保持されます(Customersテーブルは結合の左側にあるため)。

SELECT c.ship_to_party, c.ship_to_name, c.sales_group 
FROM Customer AS c 
LEFT JOIN Orders AS o 
ON c.ship_to_party = o.order_ship_to_party 
WHERE c.sales_group = "Investor Owned Util" 
ORDER BY c.ship_to_name; 

ちょっときれいとはいえ、このクエリは、あなたの最初のクエリと機能的に同等でなければならないことは注目に値します。結果が0の場合、JNevillのコメントごとに

SELECT * 
FROM Customer 
WHERE sales_group = "Investor Owned Util" 

が実際に結果を返すことを確認してください。

最後に、LEFT/RIGHT JOINを実行し、2番目のクエリごとに追加の結合条件を含む場合は注意してください。あなたのケースではクエリは実行されませんが、他のDBMSではこのクエリは有効です。クエリの評価方法の違いについては、例1.2および1.3 hereを参照してください。

関連する問題