我正在尝试在简单查询中显示默认记录,但我的尝试不起作用:
char c;
while (cin.get(c) && c != '\n' && c != '.')
...
答案 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
条款。