0

私は本質的にテーブルの 2 つのグループを持っています。「props_」と「avail_」。それぞれ約。UNION ALLを使用して結合した4つのテーブル。

特定の日付範囲の空室状況の表に表示されない、必要な場所と宿泊施設を選択する必要があります。

property tables... 'props_01', 'props_02', 'props_03', 'props_04'
   id    code         location    sleeps
   1     7A06E91875   devon       2
   2     440ac2664c   cornwall    4
   5     0474d4882b   devon       2


availability tables... 'avail_01', 'avail_02', 'avail_03', 'avail_04'
   id    prop_code     date
   1     440ac2664c    20130208
   2     440ac2664c    20130209
   3     440ac2664c    20130210
   4     440ac2664c    20130211
   5     440ac2664c    20130212

これらの空き状況テーブルには、すべての予約日が含まれています。したがって、指定された日付範囲の空室状況レコードがないプロパティ テーブルからのみ選択したいと考えています。これは私がクエリを実行しようとしていた方法です...

(avail.date != '20130209' AND avail.date != '20130210' AND avail.date != '20130211' AND avail.date != '20130212' AND avail.date != '20130213') OR (avail.date != '20130210' AND avail.date != '20130211' AND avail.date != '20130212' AND avail.date != '20130213' AND avail.date != '20130214') 

また、場所と睡眠のプロパティ テーブルにフィルターを適用する必要があります。

可用性を含める以外のすべてを実行するクエリは以下のとおりです。これは正常に機能しますが、可用性テーブルもクエリするように変更する最善の方法がわかりません...

SELECT prop.* FROM (SELECT * FROM `props_01` UNION ALL SELECT * FROM `props_02` UNION ALL SELECT * FROM `props_03` UNION ALL SELECT * FROM `props_04`) prop WHERE prop.location='Devon' AND prop.sleeps>='4' ORDER BY prop.sleeps ASC
4

2 に答える 2

0

3 つのテーブルを結合するには: Table1 、 Table2 、 Table3

SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id;

于 2013-07-24T06:10:45.460 に答える
0

別のテーブルに存在しない行を探している場合は、左結合が必要です。詳細については、これを参照してください。

http://dev.mysql.com/doc/refman/5.0/en/join.html

http://dev.mysql.com/doc/refman/5.0/en/left-join-optimization.html

于 2013-02-09T12:58:05.153 に答える