【问题标题】:Query issue, no error but it doesn't show anything查询问题,没有错误,但没有显示任何内容
【发布时间】:2013-12-10 18:05:08
【问题描述】:

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

感谢所有帮助:)

【问题讨论】:

  • 尝试执行您的查询分解。

标签: sql database phpmyadmin


【解决方案1】:

语法没问题,肯定是逻辑问题。尝试从最嵌套的开始运行每个子选择以获取返回的内容。如果您需要进一步的帮助,我建议您使用 SQL fiddler,创建示例数据,尝试并再次调用。 http://sqlfiddle.com/

【讨论】:

    【解决方案2】:

    尝试改变你的

    WHERE branchID = (选择....

    WHERE branchID IN (select....

    相等性测试通常在两列之间进行。您正在尝试将一列中的相等性应用于 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%'
    

    如果失败了,是不是 type-o,还是应该是“Rd”与“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%'
    

    如果这仍然失败,则删除 WHERE 子句并租用所有船只,然后只需添加一个

    ORDER BY b.address
    

    看看所有的小船都在哪里关联...有时在 SQL 中年轻时超载会导致问题...有时需要缓慢的步骤。

    评论反馈。

    通过查看您修改后的帖子,我现在看到您的地址包括“朴茨茅斯”,因此您的查询将失败,因为

    address = '21 Harbour Road'
    

    不一样
    address = '21 Harbour Road, Portsmouth'
    

    我已经改成

    address LIKE '21 Harbour Road%'
    

    “%”就像一个通配符,所以只要地址以“21 Harbour Road”开头即可。

    【讨论】:

    • 仍然没有返回任何东西。不过谢谢
    • @user3072131,查看修改后的答案。
    • @user3072131,查看我修改后的答案... EQUALITY vs LIKE,因为您现在将“, Portsmouth” 作为位置的一部分。
    • 非常感谢您的帮助,但我仍然收到错误消息:MySQL 返回了一个空的结果集。我的数据中有它,但由于某种原因它不起作用。但它很好我只是要离开这个查询。谢谢你的一切:D
    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2018-08-31
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2011-01-05
    相关资源
    最近更新 更多