2012-09-05 217 views
0

我試圖獲得一個子查詢,除了會顯示所有客戶的訂單名稱爲「襯衫襯衫」的訂單的名字和姓氏之外。然後,我必須按降序排列由LastName排序的結果,然後按降序排列FirstName。這是我的,但它一直給我'沒有行選擇':子查詢 - 加入

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; 

我做錯了什麼?

回答

2

第一個問題是你正在做兩個表之間的交叉連接。第二個是IN中的子查詢沒有返回任何結果。 「襯衫」可能不是一個有效的價值,但是,考慮查詢更像:

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; 

這不會解決這個問題(這是字符串‘襯衫’),但它是爲了更好的語法前進

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; 
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 
;