0

UNION を使用すると SQL の重複行が削除されることは理解していますが、別の行と重複する主キーを共有する重複行を削除する方法を知りたいです。ここに私が持っているクエリがあります

"
SELECT 
    isbn, title, rank, 
    lowest_new_price                AS lowest_price,
    lowest_new_location             AS lowest_location,

    FROM ".TBL_BOOKS."          

UNION

SELECT 
    isbn, title, rank, 
    lowest_used_price               AS lowest_price,
    lowest_used_location            AS lowest_location,

    FROM ".TBL_BOOKS." 


ORDER BY rank ASC"

入力データ

isbn,    title,    rank,    lowest_new_price,    lowest_new_location
00001    t1        1        100                  uk
00001    t1        1        200                  uk
00002    t3        5        50                   uk

希望する出力データ

isbn,    title,    rank,    lowest_new_price,    lowest_new_location
00001    t1        1        100                  uk
00002    t3        5        50                   uk

また

isbn,    title,    rank,    lowest_new_price,    lowest_new_location
00001    t1        1        200                  uk
00002    t3        5        50                   uk
4

2 に答える 2

1

2つのクエリが必要だと思います。1つはこのデータを一時テーブルに取得するためのもので、もう1つは必要なデータを取得するためのものです。必要に応じて単一のクエリで実行できますが、少し面倒になります。

まず、クエリに従ってISBNによる不明瞭なデータが必要ですが、順序付け句はありません。次に、そこから正しい個別のデータを取得する必要があります。

このようなもの:

select data.isbn, data.title, data.rank, min(data.lowest_price) as [Lowest Price], b.lowest_Location
from <your_query> data inner join <your_query> b on data.isbn = b.isbn and data.lowest_price = b.lowest_price
order by data.rank
于 2012-08-14T22:21:06.247 に答える
1

以下はいかがでしょうか

SELECT 
    isbn, title, rank, 
    lowest_new_price                AS lowest_price,
    lowest_new_location             AS lowest_location,

    FROM ".TBL_BOOKS."
    WHERE lowest_new_price <= lowest_used_price

UNION

SELECT 
    isbn, title, rank, 
    lowest_used_price               AS lowest_price,
    lowest_used_location            AS lowest_location,

    FROM ".TBL_BOOKS." 
    WHERE lowest_new_price > lowest_used_price
于 2012-08-14T21:55:28.557 に答える