2016-12-02 6 views
0

"予約"テーブルでは、顧客の予約の詳細(日付/時刻/行番号)を保持しています。 テーブル「座席」では、劇場内のすべての座席(RowNumberとZone)の詳細を保持します。このmySQLロジックで何が問題になっていますか?

このクエリの目的は、Seatに参加して、対応するBooking RowNumberにヌルエントリを持つSeatの行を表示することにより、どの座席が使用されたかを確認することです。ここでは、コードです:

SELECT s.Zone, s.RowNumber 
FROM Booking b JOIN Seat s 
ON s.RowNumber = b.RowNumber 
WHERE b.PerfDate = '2016-12-12' 
AND b.PerfTime = '20:30:00' 
AND b.RowNumber is null; 

は、コードが受理されたが、結果は最後の文を使用して、空のセットとして戻ってくるか、単にそれなしで予約しているかを示しています。明らかに私が使用しているロジックに間違っていますが、私がそれを読むときに、私がしようとしていることが意味を成すので、それを特定することはできません。たぶん明白な間違いですが、助けてくれれば幸いです。

ありがとうございます。

[編集 - 私は論理エラーを発見しました...私は、特定の日付と時刻を求めていますが、私が望むレコードは定義通りではありませんが、キャッチが好き22]

+0

なぜ、座席にヌル「RowNumber」があるのですか? **あなたは座席を見つけたいと思っていますか? – Barmar

+0

@Barmarこれは、私が欲しいものです(座席を表示しない) - 空のRowNumberは、まだ予約されていないので、座席が取られていない(またはそれがアイデアです)ことを予約内に示します。 –

答えて

2

LEFT JOINを使用して、一致しない行の条件をすべてON句に入れる必要があります。

SELECT s.zone, s.RowNumber 
FROM Seat AS s 
LEFT JOIN Booking AS b 
ON s.RowNumber = b.RowNumber AND b.PerfDate = '2016-12-12' AND b.PerfTime = '20:30:00' 
WHERE b.RowNumber IS NULL 
+0

美しい。出来た。どうもありがとう! –

関連する問題