查询没有任何行时显示默认记录

时间:2015-12-10 21:56:25

标签: mysql sql

我正在尝试在简单查询中显示默认记录,但我的尝试不起作用:

char c;

while (cin.get(c) && c != '\n' && c != '.')
    ...

2 个答案:

答案 0 :(得分:2)

由于查询没有返回任何行,coalesce从未启动过 - 没有值可以采取行动,更不用说NULL

虽然从技术上讲,可以在SQL中解决您的问题,但它将成为一个非常大,丑陋,不可维护的SQL。这是因为您正在尝试解决SQL中从未打算过的问题 - 显示问题。 SQL旨在控制绝对和严格的数据集,而不是默认为基于缺少结果集的信息性消息。 No records不是数据库中任何供应商的名称,因此请不要将其列为一个。

长话短说:不要解决数据层中的表现问题。您的前端代码应该处理缺少结果并回退到正确显示No records,它可以在您可以本地化,可控制和开发人员预期之后。

答案 1 :(得分:1)

虽然我同意这是一个表示逻辑问题,但我遇到过必须从数据库控制它的时间,因为我无法改变UI。

如果是这种情况,您有几种不同的选择。其中之一是引入一个新的临时表并使用另一个outer join

SELECT 
     COALESCE(suppliers.supplier_name, 'No records') AS supplier_name
FROM (SELECT 1 as FakeCol) t 
    LEFT JOIN suppliers ON suppliers_purchases_articles.article_id = 150
    LEFT JOIN suppliers_purchases USING(supplier_id)
    LEFT JOIN suppliers_purchases_articles USING(supplierpurchase_id)
ORDER BY suppliers_purchases.supplierpurchase_id DESC
LIMIT 1

注意我已将where条件移至join。这不是完全必要的,我只是喜欢它的读取方式。如果您必须退出where条件,则不希望否定outer join,因此您还需要添加相应的is null条款。