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

  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008
  • Nick Pitera

    Nick Pitera

    8 NİSAN 2006
  • NikkoNantone

    NikkoNantone

    21 Kasım 2011