4

顧客 1007 が以前に購入した書籍と同じカテゴリのすべての書籍のタイトルを一覧表示します。この顧客が既に購入した書籍は含めないでください。(サブクエリ)

これは私がこれまでに持っているものです:

SELECT title, customer#, category
FROM orders JOIN orderitems USING (order#)
        JOIN books USING (isbn)
WHERE isbn <> (SELECT customer#, isbn
        FROM orders o JOIN orderitems oi 
        ON o.order#=oi.order#
        where o.order#=oi.order# and o.customer#=1007);

最初の選択ではすべての本のタイトルが返され、2 番目の選択では同じ顧客が購入したすべての本が返されます。使ってみNOT IN ()ましたが <>, =any, を使った時と同じ結果になりました

4

2 に答える 2

1

小さな変化。

SELECT title, customer#, category
FROM orders JOIN orderitems USING (order#)
        JOIN books USING (isbn)
WHERE isbn NOT IN (SELECT isbn
        FROM orders o JOIN orderitems oi 
        ON o.order#=oi.order#
        where o.order#=oi.order# and o.customer#=1007);

すでに を試したことは知っていますNOT INが、サブ選択には 1 つの列 (この場合はisbn.

于 2012-09-28T06:57:23.770 に答える
-3
SELECT title, category 
FROM books WHERE category IN
 (SELECT category FROM books JOIN orderitems USING (isbn) 
   JOIN orders USING (order#) WHERE customer# = 1007)
 AND isbn NOT IN (SELECT isbn FROM orders JOIN orderitems USING (order#)
WHERE customer# = 1007);
于 2015-07-09T19:00:36.463 に答える