0

「Dress Shirt」という名前のアイテムを注文したすべての顧客の FirstName と LastName を表示する結合​​ステートメントに加えて、サブクエリを取得しようとしています。次に、LastName で昇順、次に FirstName で降順で並べ替えた結果を報告する必要があります。これは私が持っているものですが、「NO ROWS SELECTED」が表示され続けます:

SELECT FirstName, LastName
FROM HW2G_CUSTOMER, HW2G_ORDER_ITEM
WHERE Item IN 
    (SELECT Item
     FROM HW2G_ORDER_ITEM
     WHERE Item = ‘DressShirt’)
ORDER BY LastName ASC, FirstName DESC;

私は何を間違っていますか?

4

3 に答える 3

2

最初の問題は、2つのテーブル間でクロス結合を実行していることです。2つ目は、INのサブクエリが結果を返さないことです。「DressShirt」はおそらく有効な値ではありませんが、次のようなクエリを考えてみてください。

SELECT distinct FirstName, LastName
FROM HW2G_CUSTOMER c join
     HW2G_ORDER_ITEM i
     on c.customerID = i.customerID
WHERE i.Item = ‘Dress Shirt’
ORDER BY LastName ASC, FirstName DESC;

これは問題(文字列「DressShirt」)を修正しませんが、前進するためのより良い構文です。

于 2012-09-05T16:28:37.400 に答える
1

クロス結合を行っているため、現在持っているものは絶対に必要ありません。このフィドルを見てください:

http://www.sqlfiddle.com/#!3/30abb/5

SELECT FirstName, LastName
FROM HW2G_CUSTOMER WHERE CustomerId IN
    (SELECT CustomerId
     FROM HW2G_ORDER_ITEM
     WHERE Item = 'Dress Shirt')
ORDER BY LastName ASC, FirstName DESC;
于 2012-09-05T16:37:08.603 に答える
0
-- maybe a bit cleaner than @aqinas 's solution?
WITH wanted AS (
  SELECT DISTINCT CustomerId
     FROM HW2G_ORDER_ITEM
     WHERE Item = 'Dress Shirt'
   )
SELECT FirstName, LastName
FROM HW2G_CUSTOMER cus
JOIN wanted wa ON wa.CustomerId = cus.CustomerId
ORDER BY LastName ASC, FirstName DESC
 ;
于 2012-09-05T17:26:07.607 に答える