查询问题,它工作并没有给出错误消息,但它没有显示我想要的内容。 我正在努力列出在朴茨茅斯港湾路21号的一个分支机构工作的所有船只。
这是我的查询sql代码: -
SELECT boatId, address, city, postcode, type, rooms, price
FROM BoatsForRent
WHERE staffId IN (SELECT staffId
FROM Staff
WHERE branchId = (SELECT branchId
FROM Branch
WHERE address= '21 Harbour Road'))
所有帮助表示赞赏:)
答案 0 :(得分:1)
语法没问题,肯定是逻辑问题。尝试从最嵌套的方式开始运行每个子选择以获取返回的内容。如果您需要进一步的帮助,我建议使用SQL fiddler,创建示例数据,尝试并再次调用。 http://sqlfiddle.com/
答案 1 :(得分:1)
尝试更改
WHERE branchID =(选择....
到
WHERE branchID IN(选择....
相等性测试通常在两列之间。您正在尝试将一个列中的相等性应用于SELECT语句...在您测试合格员工的地方,IN是正确的。
此外,这可以使用JOIN编写,例如
SELECT
bfr.boatId,
bfr.address,
bfr.city,
bfr.postcode,
bfr.type,
bfr.rooms,
bfr.price
FROM
BoatsForRent bfr
JOIN staff s
on bfr.staffID = s.staffID
JOIN Branch b
on s.branchID = b.branchID
AND b.address LIKE '21 Harbour Road%'
评论反馈......
由于上述方法无效,请反向构建查询...一步一步,并申请以后的任何查询。将它们分成小块,直到找到缺失/不匹配元素的罪魁祸首。
select
b.branchID
from
Branch b
where
b.address LIKE '21 Harbour Road%'
如果失败了,它是一个类型o,还是应该是“Rd”vs“Road”,拼写,间距,大/小写?一个已经解决,现在检查该办公室的工作人员
select
b.branchID,
s.staffID
from
Branch b
JOIN staff s
on b.branchID = s.branchID
where
b.address LIKE '21 Harbour Road%'
如果没有返回记录,则没有列出与该分支相关联的员工。如果没有人在分公司上市,它不会明显返回租船记录。现在,加上船出租......
select
b.branchID,
s.staffID,
bfr.boatId,
bfr.address,
bfr.city,
bfr.postcode,
bfr.type,
bfr.rooms,
bfr.price
from
Branch b
JOIN staff s
on b.branchID = s.branchID
JOIN BoatsForRent bfr
on s.staffID = bfr.staffID
where
b.address LIKE '21 Harbour Road%'
如果此STILL失败,则删除WHERE子句并将所有船只出租,然后只需添加
ORDER BY b.address
并查看所有船只的关联位置......有时在SQL中年轻时会出现问题会导致问题......有时需要采取缓慢的步骤。
评论反馈。
通过查看修改后的帖子,我现在看到您的地址包含“,朴茨茅斯”,因此您的查询将会失败
address = '21 Harbour Road'
与
不同address = '21 Harbour Road, Portsmouth'
我已改为
address LIKE '21 Harbour Road%'
'%'就像一张外卡,只要具有'21 Harbour Road'的地址STARTS符合资格。