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

  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008
  • TotalSeminarsChannel

    TotalSeminar

    16 Mart 2010
  • Vicious Computers

    Vicious Comp

    14 EKİM 2006