2017-06-02 15 views
0

"d"タイプの注文が少なくとも1つある顧客以外のすべての顧客IDを選択しようとしています。HQL - 値が内部結合にない場合の結果を選択

select customers.id from Customers customers inner join Orders orders on orders.buyerId = customers.id where orders.type != 'd'; 

をしかし、これは顧客の「d」を入力していない少なくとも一つの順限り、すべての顧客IDを選択:

私が試してみました。

タイプ「d」の注文が1つ以上あるお客様以外のすべての顧客IDを選択するにはどうすればよいですか?

+0

使用しないorders.KEY交換してください。 1人のお客様には1件以上の注文があるためです。たとえば、注文Aの顧客のみを表示することはありません。しかし、この顧客は注文Bを持っているので、まだ表示されます。 –

+0

サブクエリを使用する必要がありますか? – Anonymous1

+0

以下で確認してください。まだ正しくない場合は、SQLデータとurの予想結果を記述するためにsql fiddleを使用できます。 –

答えて

0

の代わりにあなたはだから我々は注文タイプ「d」を持っているすべての顧客をフィルタリング

select customers.id from Customers customers 
where customers.id not in (select buyerId from Orders where orders.type = 'd';) 

以下のようではないで使用する必要がある内部結合を使用しました。 上記のように使用すると、注文に基づいてフィルタリングします。同じ顧客に別の注文がある場合は、顧客IDは引き続き表示されます。

0

はこれを試してみてください:

SELECT customers.id FROM Customers customers 
LEFT JOIN Orders orders ON orders.buyerId = customers.id AND orders.type = 'd' 
WHERE orders.KEY IS NULL 

は参加の代わりにOrdersテーブルのキーフィールド名で

関連する問題