0

顧客情報、注文などのデータベースがあります。注文をまったく行っていないすべての顧客を返すクエリを実行する必要があります。

関連するテーブル: ログインと注文

関連する列: login.loginID、login.loginFirstName、login.loginLastName、login.loginEmailAddress、および orders.OrderuserID

本質的に - 疑似コードで: テーブル login と列 loginID を比較して、orders.OrderUserID の下の orders テーブルに一致するものを探します。一致するものがない場合 (注文がない場合など)、ユーザーの名、姓、および電子メール アドレスを出力します。

私は頭を悩ませてきましたが、言語にいくつかの本当の問題があります。SQLに関しては、私は大の苦手です。

4

5 に答える 5

2

基本的には次のようになります。

      SELECT l.login_id
        FROM login l
   LEFT JOIN orders o
          ON l.login_id = o.login_id
       WHERE o.login_id IS NULL

重要なのは、WHERE ... IS NULL 条件で LEFT JOIN を使用することです。loginつまり、テーブル内に「拡張」された情報がないテーブル内の行を具体的に探しordersます。

これは単なる一般的な説明ですが、ケースに固有の大きなクエリを作成するプロセスに役立つことを願っています. )

于 2012-06-15T15:12:26.617 に答える
1
select loginFirstName, loginLastName, loginEmailAddress 
from login
where loginID not in
    (select distinct OrderuserID from orders)

左結合でも実行できます。

select loginFirstName, loginLastName, loginEmailAddress 
from login left join orders on loginID = OrderuserID 
where OrderuserID is null

どちらがより速く実行されるかはわかりません。試してみる。最初のほうが理解しやすいです、IMHO。

編集:「個別の選択」とは、「フィールドの一意の値のセットを返す」ことを意味します。したがって、最初の SQL のサブクエリは、注文を持っている一連のユーザー (ユーザーの ID) を返します。ユーザーが複数の注文を持っている場合、DISTINCT は ID が 1 回だけ返されるようにします。

于 2012-06-15T15:09:17.597 に答える
0

試す:

select login.loginFirstName, login.loginLastName, login.loginEmailAddress  
FROM login 
LEFT OUTER JOIN orders ON login.loginID = orders.OrderuserID 
WHERE orders.OrderuserID IS NULL;

またはそのようなもの。新しい SQL ユーザーにとってのトリックは、LEFT OUTER 結合だと思います。その指定子がない場合、結合は、2 番目のテーブルに一致がある場合にのみ、最初のテーブルから行を返します。このようにして、それらをすべて取得します (そして、IS NULL 句で一致を除外します)。

于 2012-06-15T15:16:51.077 に答える
0

最初に自分で試してみる必要がありますが、最初にグーグルで検索できます:):)。
とにかくこんな風に使えます。

SELECT l.loginFirstName,l.loginLastName,
l.loginEmailAddress FROM login AS l LEFT JOIN orders as o 
ON l.loginID = o.OrderuserID where OrderuserID is NULL
于 2012-06-15T15:17:17.073 に答える
0

これはそれを行う必要があります:

select *
from login l
left join orders o on l.loginId = o.OrderuserID
where o.OrderuserID is null
于 2012-06-15T15:11:53.463 に答える