2011-10-19 12 views
1

の場合、selectクエリのいずれかから記録する優先権を与える:MySQLの組合これは、実際の例では、私のクエリで重複

 SELECT * 
FROM (

(SELECT Deal.DealID, Deal.TitleEn, Deal.CapNum,Deal.ImageLink, 
    SUM(Buy.Quantity) AS Quantity 
FROM Buy, Deal 
WHERE Buy.DealID = Deal.DealID 
AND Buy.IsFinalBuy = '1' 
GROUP BY Buy.DealID 
HAVING Quantity = Deal.CapNum) 

union 
(SELECT Deal.DealID, Deal.TitleEn, Deal.CapNum,Deal.ImageLink,NULL AS Quantity 
FROM Deal 
WHERE Deal.EndDate < CURDATE() 
) 
)A 

    ORDER BY DealID,TitleEn,CapNum,ImageLink,Quantity ASC 

私は場合の第1選択クエリからレコードに優先権を与えたいです重複の

どうすればできますか?

+1

重複を注文、削除、または削除することは、どういう意味ですか?重複、重複IDまたは重複レコードによって、あなたはどういう意味ですか? –

+1

最初のクエリ_might_はデフォルトで '優先度'を取得しますが、これは決して頼りません。ああ、暗黙の結合構文を使用しないでください( 'FROM b、d');何かがどこから来ているのかわからない場合は、意味を混乱させる可能性があり、2番目のクエリに結合条件を残している可能性があります。 –

+0

@LostinAlabama:実際にはMySQLで有効です。私は2番目のクエリにagee、それは2つのテーブルがそれらを結合していない。私はそれの目的を見ることができません。 –

答えて

1

それぞれにリテラル値を追加してから順番に並べ替えます。

SELECT * 
FROM ((SELECT deal.dealid, 
       deal.titleen, 
       deal.capnum, 
       deal.imagelink, 
       SUM(buy.quantity) AS quantity, 
       'A'    sortby 
     FROM buy, 
       deal 
     WHERE buy.dealid = deal.dealid 
       AND buy.isfinalbuy = '1' 
     GROUP BY buy.dealid 
     HAVING quantity = deal.capnum) 
     UNION 
     (SELECT deal.dealid, 
       deal.titleen, 
       deal.capnum, 
       deal.imagelink, 
       NULL AS quantity, 
       'B' sortby 
     FROM deal 
     WHERE deal.enddate < Curdate()))a 
ORDER BY dealid, 
      sortby, 
      titleen, 
      capnum, 
      imagelink, 
      quantity ASC 
+0

ありがとうそれは今働いている。 – SilentCoder

+0

Btw:括弧で囲まれたユニオンの各SELECTをラップする必要はありません –

関連する問題