我正在介绍数据库类,我的一个问题严重地给了我麻烦。 作业说:写一个查询来显示乘客姓名,座位号和目的地。在一个列标题Travellers_info中显示。此列应按以下格式显示数据“Mary Ann Jenkins在前往Bellmead的途中被分配到Seat 15”
这是关系视图: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
答案 0 :(得分: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
答案 1 :(得分:1)
您是否尝试仔细检查 所有 您的表格(尤其是加入表格,例如“manage”和“seat_passenger”),以确保您的表格中包含有效数据会适当地加入吗?
另外,请确保文字中有空格。
例如:'is assigned to Seat'
应为' is assigned to Seat '
答案 2 :(得分:1)
如果您没有获得数据,则必须符合您的加入条件。将您的选择减少到第一个表中的一列,然后一次加入一个表,看看何时停止获取数据
答案 3 :(得分:0)
首先,你要在之前放置一个空格,这样它就不会在一起了。
passenger.name + ' is assigned to seat'
通常,您使用子查询和左外连接来进行此类操作。您不仅希望从所有这些表中一次性提取所有数据。让我看看我是否可以用一些SQL来解释这一点。如果您不理解我的示例,请转到此处:http://thenewboston.org/watch.php?cat=49&number=20并观看20-23,您肯定会理解它。
SELECT c.name + ' is assigned to Seat ' + c.seat_no + ' on the way to ' + departure_info.destination as Travellers_info
FROM departure_info
LEFT OUTER JOIN (SELECT b.Pass_id, b.name, b.seat_id, b.seat_no
FROM seat_no
LEFT OUTER JOIN (SELECT a.Pass_id, a.name, seat_passenger.seat_id
FROM seat_passenger
LEFT OUTER JOIN (SELECT passenger.name, passenger.Pass_id
from passenger
LEFT OUTER JOIN
ON passenger.Pass_id = seat_passenger.Pass_id) a seat_info
ON a.seat_id = seat_info.seat_id) b manages
ON b.seat_id = manages.seat_id) c departure_info
ON c.Dept_id = departure_info.Dept_id
我不相信这会给你正确答案。但是,它会让你努力寻找正确的答案。我想我在第三个子查询后犯了一个错误。请记住,SQL从内部评估事物,然后熄灭。要时刻铭记在心。希望这会有所帮助。
答案 4 :(得分: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年可以使用。