SORU
20 Kasım 2009, Cuma


grup farklı mysql ile postgreSQL?

MySQL sorgularını bazı Heroku kullanımı için postgreSQL göç oldum... benim sorgu en iyi çalışır, ancak grup tarafından kullandığımda benzer yinelenen bir hata yaşayıp duruyorum:

ERROR:  column "XYZ" must appear in the GROUP BY clause or be used in an aggregate function

Birisi yanlış yaptığımı bana söyleyebilir misiniz?

100% çalışan MySQL:

SELECT `availables`.* FROM `availables` INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24') GROUP BY availables.bookdate ORDER BY availables.updated_at

Hata PostgreSQL:

ActiveRecord::StatementInvalid: PGError: ERROR:  column "availables.id" must appear in the GROUP BY clause or be used in an aggregate function
: SELECT "availables".* FROM "availables"   INNER JOIN "rooms" ON "rooms".id = "availables".room_id  WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN E'2009-10-21' AND E'2009-10-23')  GROUP BY availables.bookdate ORDER BY availables.updated_at

Ruby kod SQL oluşturma:

expiration = Available.find(:all,
    :joins => [ :room ],
    :conditions => [ "rooms.hotel_id = ? AND availables.bookdate BETWEEN ? AND ?", hostel_id, date.to_s, (date days-1).to_s ],
    :group => 'availables.bookdate',
    :order => 'availables.updated_at')  

Beklenen Çıktı (mySQL sorgu çalışan):

 ----- ------- ------- ------------ --------- --------------- --------------- 
| id  | price | spots | bookdate   | room_id | created_at    | updated_at    |
 ----- ------- ------- ------------ --------- --------------- --------------- 
| 414 | 38.0  | 1     | 2009-11-22 | 1762    | 2009-11-20... | 2009-11-20... |
| 415 | 38.0  | 1     | 2009-11-23 | 1762    | 2009-11-20... | 2009-11-20... |
| 416 | 38.0  | 2     | 2009-11-24 | 1762    | 2009-11-20... | 2009-11-20... |
 ----- ------- ------- ------------ --------- --------------- --------------- 
3 rows in set

CEVAP
22 Kasım 2009, Pazar


MySQL İLE tamamen uyumlu olmayan standartlar GRUBU PostgreSQL' FARKLI. öykünülen Bu göz önünde bulundurun :

mysql :

SELECT a,b,c,d,e FROM table GROUP BY a

Bu bir değer başına 1 satır (hangisi gerçekten bilmiyorsun sunuyor. Aslında olabilir sanırım, çünkü MySQL bilmiyor hakkında karma toplamları, bu yüzden muhtemelen kullanmak bir tür... ama tek bir tür, bu yüzden sipariş satır olabilir rastgele. Sıralama yerine sütunlu bir dizin kullandığı sürece. Neyse, sorgu tarafından belirtilen değil.

isim :

SELECT DISTINCT ON (a) a,b,c,d,e FROM table ORDER BY a,b,c

Bu 1 satır değeri başına, bu satır sorgu tarafından belirtilen sıraya göre sıralamada ilk kişi olacak sağlar. Basit.

Burada, ben bir bilgisayar toplama değil unutmayın. Aslında çok GRUP hiç mantıklı değil. AYRI yapar çok daha anlamlı.

Raylar MySQL evli, isim çalışmayan SQL oluşturduğu şaşırmadım.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • André Frizzo

    André Frizz

    16 Aralık 2006
  • BeginnersTech

    BeginnersTec

    8 NİSAN 2011
  • Jimmie Jones

    Jimmie Jones

    16 Kasım 2007