0

私はデータベース クラスの概要を説明していますが、クエリの 1 つが深刻な問題を引き起こしています。課題の内容: 乗客名、座席番号、目的地を表示するクエリを作成します。これを 1 列のタイトルの Travellers_info に表示します。この列には、「Mary Ann Jenkins は Bellmead に向かう途中の 15 番席に割り当てられています」という形式でデータが表示されます。</p>

これは関係ビューです: http://prntscr.com/1jsoay

誰かが私を助けてくれませんか、どこが間違っているのかわかりません。

SELECT passenger.name + 'is assigned to Seat'
     + seat_info.seat_no + 'on the way to'
     + departure_info.destination AS Travellers_info
FROM passenger, seat_info, departure_info, seat_passenger, manages
WHERE passenger.Pass_id=seat_passenger.pass_id
  AND seat_passenger.Seat_id=seat_info.Seat_id
  AND seat_info.seat_id=manages.Seat_id
  AND manages.Dept_id=departure_info.dept_id
4

5 に答える 5

1

データを取得していない場合は、結合基準に含まれている必要があります。選択を最初のテーブルの列だけに減らしてから、各テーブルを一度に 1 つずつ結合し、データの取得が停止するタイミングを確認します

于 2013-08-06T22:47:50.050 に答える
1

すべてのテーブル (特に「manages」や「seat_passenger」などの結合テーブル) を再確認して、適切に結合できる有効なデータが含まれていることを確認しましたか?

また、テキストにスペースがあることを確認してください。

例:'is assigned to Seat'あるべき' is assigned to Seat '

于 2013-08-06T22:39:06.440 に答える
1

「+」演算子を使用してテキスト値を「追加」することはできません。

使用しているデータベースがわからない場合、ソリューションはおそらく次のいずれかを使用していCONCAT()ます。

SELECT concat(passenger.name, 'is assigned to Seat', seat_info.seat_no,
    'on the way to', departure_info.destination) AS Travellers_info
FROM passenger, seat_info, departure_info, seat_passenger, manages
WHERE passenger.Pass_id=seat_passenger.pass_id
  AND seat_passenger.Seat_id=seat_info.Seat_id
  AND seat_info.seat_id=manages.Seat_id
  AND manages.Dept_id=departure_info.dept_id

または||演算子を使用して:

SELECT passenger.name || 'is assigned to Seat'
     || seat_info.seat_no || 'on the way to'
     || departure_info.destination AS Travellers_info
FROM passenger, seat_info, departure_info, seat_passenger, manages
WHERE passenger.Pass_id=seat_passenger.pass_id
  AND seat_passenger.Seat_id=seat_info.Seat_id
  AND seat_info.seat_id=manages.Seat_id
  AND manages.Dept_id=departure_info.dept_id
于 2013-08-06T22:33:58.420 に答える
0

MSSQL または MSAccess でこれを試してください。

クエリの最適化には ON (結合) を使用します

SELECT passenger.name + 'is assigned to Seat '
 + ltrim(rtrim(convert(char,seat_info.seat_no))) + ' on the way to'
 + departure_info.destination AS Travellers_info
FROM passenger p
join    seat_passenger sp on sp.pass_id = p.Pass_id
join    seat_info s on s.Seat_id = sp.Seat_id
join    manages m on m.Seat_id = s.Seat_id
join    departure_info d on d.dept_id = m.dept_id

2008R2 の concat は有効な関数ではないため、数値データを文字に変換する必要があります。2012年には利用可能です。

于 2013-08-06T23:10:25.883 に答える