dışında sorgulamak için SQL'i kullanın. Adı (Ann, Ben, Chris, Tom, John),
içeren bir tablom var. Bunu sql kullanarak bir ilk, z harfini kullanarak sorgulamak istiyorum.İlk kayıt
Ama John’a ilk kayıtta yer vermek istediğim bir durum var.
dışında sorgulamak için SQL'i kullanın. Adı (Ann, Ben, Chris, Tom, John),
içeren bir tablom var. Bunu sql kullanarak bir ilk, z harfini kullanarak sorgulamak istiyorum.İlk kayıt
Ama John’a ilk kayıtta yer vermek istediğim bir durum var.
select name
from names
order by
case when name = 'John' then 0 else 1 end,
name
+1 durum bu durumda + sendikadan daha mı hızlı? İyi bir endeks ile + birliğin daha hızlı olabileceğini düşünürdüm. –
'ı kullanmanıza gerek kalmadan – Chris
@aF, UNION'lerden kaçınmak, kendi başına bir amaç değildir, özellikle de 'UNION ALL' özelliğini kullanabiliyorsanız, bu da çiftlerin masraflı bir şekilde kontrol edilmesini önler. – Johan
(SELECT * FROM atable WHERE username = 'John')
UNION ALL
(SELECT * FROM atable WHERE username <> 'John' ORDER BY username)
Veya daha genel: Herhangi bir nedenden dolayı birliği engellemek için sahip varsa
(SELECT * FROM atable ORDER BY username DESC LIMIT 1)
UNION ALL
(SELECT * FROM atable WHERE id NOT IN (
SELECT id FROM atable ORDER BY username DESC LIMIT 1)
ORDER BY username)
, bu daha yavaş kodu da çalışacaktır:
SELECT * FROM atable
ORDER BY
CASE WHEN id IN (SELECT id FROM atable ORDER BY username DESC LIMIT 1)
THEN 0 ELSE 1 END
, username
SQL sunucusunda sözdizimi biraz farklıdır, alt sorgu şu şekildedir:
SELECT TOP 1 id FROM atable ORDER BY username DESC
kullanıcı adı IS NULL? ;-) – wildplasser
Buraya 'UNION'un sonuçları SELECT' için bir dış sorguya ihtiyacınız yok mu? – Yuck
Dıştan bir 'siparişe göre' eksik olduğu düşünüldüğünde, sunucunun hala iki sendikadan satırları karıştırmasına izin verilir. – GSerg
Bu basit:
(SELECT Name
FROM Users
WHERE Name = 'John')
UNION ALL
(SELECT *
FROM Users
WHERE Name <> 'John'
ORDER BY Name)
seçme ayrı çalışmaz maddesi ile sırayla bir olgu deyimi yerleştirmek. Aşağıdakileri daha sezgisel olarak bulabilirim ve ayrıca ayrı bir seçime ihtiyacınız varsa çalışır. Sonuç kümesinde fazladan bir sütun döndürse bile.
DECLARE @names TABLE
(
Name varchar(20)
)
INSERT INTO @names
SELECT 'Tom'
INSERT INTO @names
SELECT 'John'
INSERT INTO @names
SELECT 'Chris'
INSERT INTO @names
SELECT 'Ann'
INSERT INTO @names
SELECT 'Ben'
select Name, case when Name = 'John' then 1 else 0 end AS IsTopRow
from @names
order by IsTopRow DESC, Name
Sonuçlar:
Name IsTopRow
John 1
Ann 0
Ben 0
Chris 0
Tom 0
Ben bluefeet katılıyorum. Ayrıca, eğer insanlar sorularınızı cevaplamazsa, kendinize cevap verin. – Chris
olası [kopyalamaya göre belirli bir değerle sıralama - ORDER BY] (http://stackoverflow.com/questions/4138430/sorting-by-value-specific-order-by) – GSerg