gpt4 book ai didi

mysql - 选择按 NULLABLE 列分组的所有行

转载 作者:行者123 更新时间:2023-11-29 04:34:13 25 4
gpt4 key购买 nike

我有一个表“localization_string”来保存应用程序本地化的字符串。它用于保存多个应用程序(“提供者”)的字符串。字符串有上下文(显示它们的地方)。一些字符串具有数字提供者 ID,一些具有 NULL 的提供者 ID(这些是“默认”字符串)。一些上下文由多个提供者指定(在单独的行中)。

我想获取特定提供商的所有字符串。这包括所有“默认”字符串,但当还使用提供者 ID 指定了上下文时,则必须选择该字符串。

我有这个简化的表结构作为说明:

  • 上下文,varchar,不为空
  • provider_id, number, null

一些简化的示例行可能如下所示:

id   context                | provider_id
----------------------------+------------
1 common.contract.header | NULL
2 common.contact.address | NULL
3 webcalc.home.title | NULL
4 webcalc.home.title | 1
5 webcalc.home.title | 2

所以对于提供者 1,我想获得字符串 ID 1、2、4。不是 #3,因为 provider_id 1 是使用相同的上下文指定的,而不是 #2,因为它与 #1 不同。

--- 编辑 ---

这是“localization_string”的 CREATE TABLE 命令:

CREATE TABLE `localization_string` (
`localization_string_id` int(11) NOT NULL AUTO_INCREMENT,
`context` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
`entity_created` datetime NOT NULL,
`entity_version` int(11) NOT NULL,
`locale` int(11) NOT NULL,
`provider` int(11) DEFAULT NULL,
PRIMARY KEY (`localization_string_id`),
KEY `fk_19cf27dcf987735b3f92dcbe7e2` (`locale`),
KEY `fk_2b9de3a0dacbfae475f526c12d0` (`provider`),
KEY `ind_be3921786d4fef28d84f42c24a2` (`context`,`locale`,`provider`),
CONSTRAINT `fk_19cf27dcf987735b3f92dcbe7e2` FOREIGN KEY (`locale`) REFERENCES `locale` (`locale_id`),
CONSTRAINT `fk_2b9de3a0dacbfae475f526c12d0` FOREIGN KEY (`provider`) REFERENCES `contract_provider` (`contract_provider_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

非常感谢您的帮助,因为我无法解决这个问题。

最佳答案

好吧,我更清楚你想做什么。

这是一个解决方案:

SELECT
COALESCE(p.localization_string_id, d.localization_string_id) AS localization_string_id,
d.context
FROM localization_string AS d
LEFT OUTER JOIN localization_string AS p
ON d.context = p.context AND p.provider = ?
WHERE d.provider IS NULL;

表引用 d 用于默认字符串,我假设每个上下文总是有一个默认条目。

表引用 p 是给定提供者的可选字符串。 p.provider=? 上的条件必须放在连接条件中,而不是 WHERE 子句中。如果该提供者的给定上下文没有行,则外部联接将返回所有 NULL。

然后 COALESCE() 函数返回 p 的特定行(如果存在匹配项)。如果不是,它将默认为 d 中的默认行。

关于mysql - 选择按 NULLABLE 列分组的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48586791/

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