gpt4 book ai didi

mysql - 需要为不返回值的 SQL IN 获取常量值

转载 作者:可可西里 更新时间:2023-11-01 08:49:59 27 4
gpt4 key购买 nike

当尝试在 SQL 查询中使用 IN 运算符从表中获取数据时,如果没有行可用于该条件,则不会返回任何行,如下例所示:

mysql> SELECT * FROM employee_tbl;
+------+------+------------+--------------------+
| id | name | work_date | daily_typing_pages |
+------+------+------------+--------------------+
| 1 | John | 2007-01-24 | 250 |
| 2 | Ram | 2007-05-27 | 220 |
| 3 | Jack | 2007-05-06 | 170 |
| 3 | Jack | 2007-04-06 | 100 |
| 4 | Jill | 2007-04-06 | 220 |
| 5 | Zara | 2007-06-06 | 300 |
| 5 | Zara | 2007-02-06 | 350 |
+------+------+------------+--------------------+

mysql> SELECT daily_typing_pages FROM employee_tbl WHERE name IN ( 'John','Ram' ,'XYZ');

O/p 将如下所示,只有 2 行:

daily_typing_pages  |
--------------------+
250 |
220 |

我需要的是在值不匹配的情况下有一些常量值。所以我期待的输出是

daily_typing_pages  |
--------------------+
250 |
220 |
100 |

这有可能实现吗?

编辑:最后设置 SQL 的值。

最佳答案

好吧,您有多种选择可以实现这一目标。但是,它们中的大多数都是“绕过”问题的解决方法。问题很简单,您的数据不一致。选择一个不存在的用户应该不会产生任何结果(这会发生但不是您想要的结果)。

选项 1.) 修复数据:将缺失的用户 XY 插入表中,将未设置的值保留为 NULL。 (然后您可以使用 IFNULL(pages, 100) 或您喜欢的任何默认值

选项 2.) Str2Rows:您可以创建一个存储过程或函数,它允许您动态地将给定的字符串(如 A,B,C)转换为一个三行的临时表,因此您可以在您的左/右加入 employee_tbl。

选项 3.) 结果表:创建一个表,等于您的用户表。仅插入您要查询的名称和默认值。然后从您的员工表中执行 SELECT INTO。 (XY 的默认值将保持不变)

选项 4.) 在 SQL 之外为非现有用户插入值(因此在显示结果时)

然而,修复原因比消除症状“更好”,所以我建议您选择选项 1。


编辑:选项 3 可能如下所示:http://sqlfiddle.com/#!2/82f9e/2

1.) 清除结果表(请注意,名称必须是唯一的才能使 Replace 起作用)

2.) 将您需要的结果插入到您的结果表中:

INSERT InTO employee_result (name,pages) VALUES ("John", NULL);
INSERT InTO employee_result (name,pages) VALUES ("Ram", NULL);
INSERT InTO employee_result (name,pages) VALUES ("XY", NULL);

3.) 为那些有值的用户替换空值:

REPLACE INTO employee_result (name, pages) SELECT name, pages FROM employee_tbl
WHERE name in (SELECT name FROM employee_result);

4.) 检索结果集并为那些没有自己值的设置默认值。

SELECT name, IFNULL(pages,100) from employee_result;

这也可以被“修改”为与存储过程和临时表一起工作。 (那就是选项 2)

希望对您有所帮助。

关于mysql - 需要为不返回值的 SQL IN 获取常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16029205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com