查询问题,没有错误但它没有显示任何内容

时间:2013-12-10 18:05:08

标签: sql database phpmyadmin

查询问题,它工作并没有给出错误消息,但它没有显示我想要的内容。 我正在努力列出在朴茨茅斯港湾路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'))

所有帮助表示赞赏:)

2 个答案:

答案 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符合资格。