【问题标题】:How to return 3 rows always even if there is no enough data即使没有足够的数据,如何始终返回 3 行
【发布时间】:2020-03-05 12:54:17
【问题描述】:

是否可以始终返回 3 行?即使没有数据存在?

所以我有两个表,我总是需要返回 3 行,这样我就不必担心创建逻辑,如果我可以仅在查询上执行此操作,那么我可以节省时间。

用户表

|user_id| name | status|
1         bob      1
2         alice    1
3         maria    0

转接表

id| user_id|transfer_name|
1      1        test1
2      1        test1
3      1        test1
4      1        test1
5      1        test1
6      1        test1
7      2        test1
8      2        test1
9      2        test1
10     2        test1

这是我当前的查询

SELECT superstar.user_id,superstar.name,superstar.ranking FROM (
  SELECT transfer.user_id,user.name,COUNT(transfer.transfer_name) AS ranking 
  FROM transfer AS transfer
  LEFT JOIN users AS user ON user.id = transfer.user_id 
  GROUP BY transfer.user_id
  UNION SELECT 'N/A'
) AS superstar
LIMIT 3;

如果只有两行怎么办?我仍然想返回 3 行。我尝试使用 UNION 但我遇到了The used SELECT statements have a different number of columns 的错误 我觉得我做错了。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql database mariadb


    【解决方案1】:

    试试这个

    SELECT superstar.user_id,superstar.name,superstar.ranking FROM (
        SELECT transfer.user_id,user.name,COUNT(transfer.transfer_name) AS ranking 
        FROM transfer AS transfer
        LEFT JOIN users AS user ON user.id = transfer.user_id 
        GROUP BY transfer.user_id
        UNION ALL 
        SELECT 'N/A', 'N/A', 0
        UNION ALL
        SELECT 'N/A', 'N/A', 0
        UNION ALL 
        SELECT 'N/A', 'N/A', 0
    ) AS superstar
    LIMIT 3;
    

    【讨论】:

    • 您好先生,它有效,我会在 8 分钟后接受它,但是先生,您能解释一下您的问题吗?只为 3 工会所有。
    • 如果您的查询未返回任何行,则由于 UNION ALL 将添加 3 行,UNION 将仅返回不同的行,但 UNION ALL 将返回所有行
    • 谢谢先生,但如果没有数据,我还有最后一个问题,第一行返回 null,第二行和第三行的值为 N/A 我该如何解决第一个问题也返回不适用
    • 你可以使用superstar.user_id IS NOT NULL
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2017-08-22
    • 2018-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    相关资源
    最近更新 更多