0

Stackoverflowers、MYSQL テーブルから選択し、MYSQL クエリの最後に ID 54 を表示したいのですが、次のコードを作成しましたが、ORDER と競合します。

SELECT * FROM owners WHERE id <= 53
UNION
SELECT * FROM owners WHERE id >= 55
ORDER BY owner
UNION
SELECT * FROM owners WHERE id = 54

機能したとしても非常にバグが多いと思いますが、助けてもらえますか?

4

4 に答える 4

2

の副選択の順序に依存することはできませんUNION。次のような他の多くのStackOverflowの質問も参照してください。

UNIONとORDERBYによる奇妙な結果

このようにしてください:

SELECT * FROM owners
-- Order by "ID category" first
ORDER BY CASE WHEN ID <= 53 THEN 1
              WHEN ID >= 55 THEN 2
              WHEN ID  = 54 THEN 3 END,
-- Then, within "category 55", order by owner, too
         CASE WHEN ID <= 53 THEN ''
              WHEN ID >= 55 THEN owner
              WHEN ID  = 54 THEN '' END

その2番目の式を少し調整する必要があるかもしれORDER BYません。これは、その順序付けで何をしたいのかよくわからないためですowner...

于 2012-05-14T08:34:53.763 に答える
2

最後に54を付けたい場合は、クエリを次のように短縮できます。

SELECT * FROM owners 
WHERE id <= 53 or id >= 55 or id = 54
ORDER BY 
   id = 54, 
   owner

Falseは最初にソートし、trueは最後にソートします。他のデータベースはこのようにそれを行います:

SELECT * FROM owners 
WHERE id <= 53 or id >= 55 or id = 54
ORDER BY 
   case when id = 54 then 1 else 0 end, 
   owner

しかし、それはおかしいです、条件を完全に削除してください:

SELECT * FROM owners 

ORDER BY 
   case when id = 54 then 1 else 0 end, 
   owner
于 2012-05-14T08:37:16.697 に答える
1

あなたの例に関して、あなたはすべてを選択し、最初から最後までownersの行を表示したいと思います。id=54

SELECT * FROM owners 
order by case id when 54 then 1 else 0 end, id
于 2012-05-14T08:35:28.320 に答える
0

括弧を使ってみてください

(SELECT * FROM owners WHERE id <= 53)
UNION
(SELECT * FROM owners WHERE id >= 55 ORDER BY owner)
UNION
(SELECT * FROM owners WHERE id = 54)
于 2012-05-14T08:33:16.210 に答える