返回不存在的行的默认值

2024-02-26

对于非常基本的查询

SELECT id, column1, column2
FROM table1
WHERE id IN ("id1", "id2", "id3")

其中 where 语句中的参数作为变量传递,我还需要为 id 不存在的行返回值。一般来说,这是一个非常相似的问题,如下所述:SQL:如何返回不存在的行? https://stackoverflow.com/questions/5925338/sql-how-to-return-an-non-existing-row但是WHERE语句中有多个参数

当 id2 不存在时现在的结果:

-------------------------------
| id  | column1   | column2   |
-------------------------------
| id1 | some text | some text |
| id3 | some text | some text |
-------------------------------

id2 不存在时的期望结果

-----------------------------------
| id  | column1     | column2     |
-----------------------------------
| id1 | some text   | some text   |
| id2 | placeholder | placeholder |
| id3 | some text   | some text   |
-----------------------------------

我的第一个想法是创建一个临时表并将其与查询连接起来。不幸的是,我无权创建任何类型的临时表,因此我只能使用 SELECT 语句。

有没有办法通过 SQL SELECT 查询来做到这一点?

Edit:事实上,上述情况是假设的情况。 WHERE 子句中可能有数百个 id,其中缺失的数量未知。


您可以创建派生表来创建类似于临时表的内容,但它只能用于以下一个查询:

SELECT t.id, COALESCE(t.column1, _dflt.column1) AS column1
FROM (
  SELECT 'id1' AS id, 'placeholder text 1' as column1
  UNION ALL
  SELECT 'id2', 'placeholder text 3'
  UNION ALL
  SELECT 'id3', 'placeholder text 3'
) AS _dflt
LEFT OUTER JOIN table1 t USING (id);

回复评论:

我刚刚在 MySQL 5.6.15 上测试了上面的方法,看看通过一系列 UNION ALL 可以获得多少个不同的 SELECT,每个 SELECT 一行。

我得到的派生表返回 5332 行,但我认为如果我有更多 RAM,我可以得到更高的值。

如果我再尝试一次 UNION ALL,我会得到:ERROR 1064 (42000): memory exhausted near '' at line 10665。我在此虚拟机上仅配置了 2.0GB RAM。

对于这个解决方案的工作来说,有多少个未知的 id 并不重要。只需将它们全部放入派生表中即可。通过使用LEFT OUTER JOIN,它会自动查找 table1 中存在的条目,对于缺少的条目,派生表中的条目将与 NULL 进行匹配。

The 合并() http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#function_coalesce函数返回其第一个非空参数,因此它将使用匹配行中的列(如果存在)。如果没有找到,它将默认为派生表中的列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

返回不存在的行的默认值 的相关文章

  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • 是什么阻止“Select top 1 * from TableName with (nolock)”返回结果?

    我目前正在运行以下语句 select into adhoc san savedi from dps san savedi record 这花了很长时间 我想看看它走了多远 所以我运行了这个 select count from adhoc s
  • PostgreSQL Age() 函数:在不同月份登陆时出现不同/意外的结果

    今天 我在 PostgreSQL 9 6 中运行此查询时遇到了无法解释的结果 SELECT age 2018 06 30 2018 05 19 AS one age 2018 07 01 2018 05 20 AS two 两列的预期结果
  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 使用 WHILE 创建虚拟数据

    我尝试使用 a 在表中插入一些虚拟数据WHILE 但它运行得非常非常慢 我在想也许我写的代码不正确 你能看一下并确认一下吗 Insert dummy data DECLARE i int Content int SET i 5001 WHI
  • MySQL+子串怎么做? + 替换?

    我不太擅长 SQL 希望能够变得更好 我在尝试执行某些表操作时遇到一些麻烦 我希望能够从下面的 ProgUID 列中选择子字符串 就像是 SUBSTRING table ProgUID 3 12 这将为我提供 ProgUID P CAMVE
  • 通过连接从两个表中删除?

    我有两个表如下 tbl1 tbl2 id article id title image whole news tags author older datetime 其中 tbl1 id gt tbl2 article id 如何从两个表中删
  • 如何在 SELECT 子句中编写带点(“.”)的列名?

    我正在尝试使用 编写列名称 没有成功 sample SELECT PrmTable Value MAX Value FROM TempTable or SELECT MAX Value AS PrmTable Value FROM Temp
  • 将两行中相似的列数据合并到一行中

    我的查询结果具有以下特征 LIDCode Total Domain Region VSE Version AB02 15 GLOBAL CANLA 0 6943 AB02 5925 CENTRE STREET SW 31 GLOBAL CA
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 在 MacOSX10.6 上运行 python 服务器时 MySQLdb 错误

    运行我的服务器 python manage py runserver 产生以下错误 django core exceptions ImproperlyConfigured 加载 MySQLdb 模块时出错 没有名为 MySQLdb 的模块
  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • 插入多行并返回主键时 Sqlalchemy 的奇怪行为

    插入多行并返回主键时 我注意到一些奇怪的事情 如果我在 isert 查询中添加使用参数值 我会得到预期的行为 但是当将值传递给游标时 不会返回任何内容 这可能是一个错误还是我误解了什么 我的sqlachemy版本是0 9 4 下面如何重现错
  • sql查询将两列与一列连接起来

    我在 MS Access 2010 中有 2 个表 如下所示 USERS u id u name LOAN l id l from ref users u id l to ref users u id l amount Users u id
  • 如何在 sqlalchemy 中创建基于文字的查询?

    我创建了一个函数来创建表达式 def test operator1 operation operator2 return literal column operator1 op operation operator2 现在当我用 test
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • 使用Powershell访问远程Oracle数据库

    我需要能够连接到我的网络上基于 Windows 7 的 Oracle 服务器 32 位 Oracle XE 我需要连接的机器运行 Windows 7 64 位 两台机器上都安装了 Powershell 我已在 64 位计算机上安装了 Ora
  • 获取家庭成员

    假设以下家庭 其构建架构是 create table PersonConn child int parent int insert into PersonConn values 1 2 insert into PersonConn valu

随机推荐