1

mysql でいくつかの条件を使用して左結合後に特定の null 値をフィルタリングすることは可能ですか?

参照用の私のsqlfiddle

http://sqlfiddle.com/#!2/cb03b/1

特定の予約日時のステータスを含むテーブルを返したい日付条件を追加しましたが、ステータスを持つ他の日付の予約の行を返します

私のテーブル構造が間違っているか、それとも解決策ですか....

日付 2012 年 12 月 9 日 00:00:00+0000 の予想出力

TABLE_ID FLOOR_ID TABLE_STATUS  BOOKING_ID         D
1         1        seated            35      December, 09 2012 00:00:00+0000
2         1        free           (null)    (null)
3         1        free           (null)    (null)
4         1        free           (null)    (null)
5         1        free           (null)    (null)

しかし、予約テーブルから他のnullを取得しています

 TABLE_ID FLOOR_ID TABLE_STATUS BOOKING_ID  D
   1     1           seated       35    December, 09 2012 00:00:00+0000
   2     1                        (null)    (null)
   2     1                        (null)    (null)
   3     1            free        (null)    (null)
   4     1            free        (null)    (null)
   5     1            free        (null)    (null)
4

1 に答える 1

1

を使用Group Byしてこれを行うことができますが、1 つのテーブルに複数の一致がある場合に何が必要かは明確ではありません。left outer joinとの組み合わせを使用してinner join、不要な booking_table 行を無視できます。

Select
  t.table_id,
  t.floor_id,
  coalesce(Max(bt.table_status),'free') as table_status,
  max(bt.booking_id) as booking_id,
  max(bt.date) as d
From
  ttable as t
    Left Outer Join (
      Select
        bt.table_id,
        bt.table_status,
        b.booking_id,
        b.date
      From
        booking_table as bt 
          Inner Join
        booking As b
          On b.booking_id = bt.booking_id And b.date = '2012-12-09'
    ) bt On bt.table_id = t.table_id
Where
  t.floor_id = 1
Group By
  t.table_id,
  t.floor_id

right outer joina を使用してネストを回避できますが、一般的にはお勧めしません。

Select
  t.table_id,
  t.floor_id,
  coalesce(Max(bt.table_status),'free') as table_status,
  max(b.booking_id) as booking_id,
  max(b.date) as d
From
  booking_table as bt
    Inner Join
  booking b
    On b.booking_id = bt.booking_id And b.date = '2012-12-09'
    Right Outer Join
  ttable as t
    On bt.table_id = t.table_id
Where
  t.floor_id = 1
Group By
  t.table_id,
  t.floor_id

http://sqlfiddle.com/#!2/cb03b/20

于 2012-12-09T17:58:22.273 に答える