2017-11-17 12 views
0

次の大きなクエリコードでは、次のエラーが発生します。on節比較のエラー - Big Query

select 
    selected_date date, 
    pp.name property, 
    bb.bookings bb, 
    av.available vailable, 
from 
(SELECT DATE(DATE_ADD(TIMESTAMP("2017-10-01"), pos - 1, "DAY")) AS selected_date 
FROM (
    SELECT ROW_NUMBER() OVER() AS pos, * 
    FROM (FLATTEN((
    SELECT SPLIT(RPAD('', 1 + DATEDIFF(TIMESTAMP(CURRENT_DATE()), TIMESTAMP("2017-10-01")), '.'),'') AS h 
    FROM (SELECT NULL)),h 
)))) v 
    cross join 
(select p.name name from [roomsproperties.properties] p where p.name not like '%test%' group by name) as pp 

left join 
(select sum(b.rooms) bookings, 
     p.name property, 
     b.checkin checkin, 
     b.checkout checkout 
     from [bookings.bookings] b 
     left join [roomsproperties.rooms] r on r.id = b.room_id 
      left join [roomsproperties.properties] p on p.id = r.property_id 
     where p.name not like '%test%' 
     and b.status not in('Rejected', 'Cancelled - By customer', 'OTP Not Varified') 
     group by property,checkin,checkout 
     ) as bb on pp.name = bb.property and (v.selected_date between bb.checkin and bb.checkout) 

left join 
(select sum(r.quantity) available, 
     p.name property, 
     date(r.created_at) date 
     from [roomsproperties.rooms] r 
     left join [roomsproperties.properties] p on p.id = r.property_id 
     group by property, date 
     ) av on pp.name = av.property and v.selected_date >= av.date 

誤りがあり、

エラー:ON句のテーブル名が付いすべてのフィールド名と、各テーブルから1フィールド名の=の比較のでなければなりません。いずれかの助け

+1

として、代わりに標準SQLを使用することを検討してください。同じ制限がありません。デフォルトで標準のSQLを使用する[新しいBigQuery UIのプレビュー用に登録する](https://docs.google.com/forms/d/e/1FAIpQLSf6hyfvoWZ8eUbbKWq9fzVfj7ljVyl2SdhtWH038Xrx2eHVrw/viewform)が可能です。 –

答えて

0

あなたは試してみてくださいすることができ、標準SQL

を使用することを検討してください:

(select ...) as bb on pp.name = bb.property 
WHERE v.selected_date between bb.checkin and bb.checkou 

とのエラーメッセージが言う

(select ...) as av on pp.name = av.property 
WHERE v.selected_date >= av.date