- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将法语字符串(语言 ID 1)合并到一列中。到目前为止,我能够在 table1.title
和 table2.translated_topic
中获取法语字符串,但不确定如何连接它们。
版本:Postgres 9.6.0
源表架构:
表 1:knowledgebase_topics
id | title | language_id |
------------------------------------
64 | The Topic | 91 |
65 | The Topic 2 | 91 |
62 | Le fav sujet | 1 |
63 | Le fav sujet 2 | 1 |
61 | le bonjour | 1 |
表 2:knowledgebase_topics_translations
id | translated_topic| knowledgebase_topic_id | language_id |
-------------------------------------------------------------
| Le sujet | 64 | 1 |
| Le sujet 2 | 65 | 1 |
| Fav The Topic | 62 | 91 |
| Fav The Topic 2 | 63 | 91 |
给定以下查询:
SELECT title, translated_topic, "kbt".language_id, "kbtt".language_id
FROM knowledgebase_topics as "kbt"
LEFT JOIN knowledgebase_topics_translations as "kbtt" on ("kbtt".knowledgebase_topic_id = "kbt".id)
INNER JOIN knowledgebase_topics_organizations as "kbto" on ("kbto".knowledgebase_topic_id = "kbt".id)
WHERE "kbto"."organization_id" = 1
AND to_tsvector("kbt".title) @@ to_tsquery('le')
OR to_tsvector("kbtt".translated_topic) @@ to_tsquery('le')
AND "kbt".language_id = 1
OR "kbtt".language_id = 1;
我得到以下结果:
title | translated_topic | language_id | language_id
----------------+------------------+-------------+-------------
The Topic | Le sujet | 91 | 1
The Topic 2 | Le sujet 2 | 91 | 1
Le fav sujet | Fav The Topic | 1 | 91
Le fav sujet 2 | Fav The Topic 2 | 1 | 91
le bonjour | | 1 |
期望的结果:table1.title
和table2.translated_topics
已根据language_id == 1
合并.两个表都有一个语言 ID 列。
title | language_id
----------------+--------------
Le sujet | 1
Le sujet 2 | 1
Le fav sujet | 1
Le fav sujet 2 | 1
le bonjour | 1
我该怎么做?
注意:我不是单纯的想查lang IDs = 1,比如
and "kbt".language_id = 1 AND (instead of OR) "kbtt".language_id = 1;
因为这会导致语言 ID 1 的表 2
中缺少 2 条记录:
title | translated_topic | language_id | language_id
----------------+------------------+-------------+-------------
Le fav sujet | Fav The Topic | 1 | 91
Le fav sujet 2 | Fav The Topic 2 | 1 | 91
le bonjour | | 1 |
那么,我已经让它工作了......但这性能好吗?
SELECT title, "kbt".language_id
FROM knowledgebase_topics as "kbt"
INNER JOIN knowledgebase_topics_organizations as "kbto" on ("kbto".knowledgebase_topic_id = "kbt".id)
WHERE "kbto"."organization_id" = 1
AND to_tsvector("kbt".title) @@ to_tsquery('le')
AND "kbt".language_id = 1
UNION ALL
SELECT translated_topic, "kbtt".language_id
FROM knowledgebase_topics_translations as "kbtt"
INNER JOIN knowledgebase_topics_organizations as "kbto" on ("kbto".knowledgebase_topic_id = "kbtt".id)
WHERE "kbto"."organization_id" = 1
AND to_tsvector("kbtt".translated_topic) @@ to_tsquery('le')
AND "kbtt".language_id = 1;
给出输出:
title | language_id
----------------+-------------
le bonjour | 1
Le fav sujet | 1
Le fav sujet 2 | 1
Le sujet | 1
Le sujet 2 | 1
(5 rows)
最佳答案
首先,观察我们如何使用简洁的 DDL 最好地描述问题。最好在未来,你会学习如何写这样的问题..
CREATE TEMPORARY TABLE knowledgebase_topics AS
SELECT * FROM ( VALUES
(64,'The Topic',91),
(65,'The Topic 2',91),
(62,'Le fav sujet',1),
(63,'Le fav sujet 2',1),
(61,'le bonjour',1)
) AS t(knowledgebase_topic_id, title, language_id);
CREATE TEMPORARY TABLE knowledgebase_topics_translations AS
SELECT * FROM ( VALUES
('Le sujet' ,64,1 ),
('Le sujet 2' ,65,1 ),
('Fav The Topic' ,62,91 ),
('Fav The Topic 2',63,91 )
) AS t(translated_topic, knowledgebase_topic_id, language_id);
然后您只需告诉我们您想要什么,我们就可以轻松搭建工作环境并回答您的问题。不需要英语!对我们双方都更轻松。
这里我们使用 UNION ALL
我们将其包装在 SELECT
中所以我们可以按 id 排序,并轻松地在一个地方更改 language
您正在寻找的。
SELECT title, language_id
FROM (
SELECT knowledgebase_topic_id, title, language_id
FROM knowledgebase_topics
UNION ALL
SELECT knowledgebase_topic_id, translated_topic, language_id
FROM knowledgebase_topics_translations
) AS t(id, title, language_id)
WHERE language_id = 1
ORDER BY id;
title │ language_id
────────────────┼─────────────
le bonjour │ 1
Le fav sujet │ 1
Le fav sujet 2 │ 1
Le sujet │ 1
Le sujet 2 │ 1
(5 rows)
关于postgresql - 根据表值合并两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41625097/
我的 postgresql 有问题,我复制了所有文件,然后将其删除。然后,我安装了新的,问题就解决了。现在可以将旧文件和文件导入新文件吗? 最佳答案 如果它们是相同的主要版本(即 9.0 到 9.0.
我想使用 Postgresql 9.2.2 来存储我的应用程序的数据。我不得不构建一个应该基于数据库级别的触发器(当数据库启动时,这个触发器将被触发并执行。),当 postgresql 服务器启动时是
我已经使用下面的查询从 Postgresql 目录表中获取 Sequence 对象的完整信息 select s.sequence_name, s.start_value, s.minimum_valu
Postgres 版本:9.3.4 我需要执行驻留在远程数据库中的函数。该函数根据给定的参数返回一个统计数据表。 我实际上只是在我的本地数据库中镜像该函数,以使用我的数据库角色和授权来锁定对该函数的访
我在 CentOS 7 上,我正在尝试解决“PG::ConnectionBad: FATAL: Peer authentication failed for user”错误。 所以我已经想出我应该更改
我写了一个触发器函数,在触发器表列名上循环,我从具有不同列的不同表调用该函数。该函数将列名插入到数组中并在它们上循环,以便将值插入到另一个模式和表中。 函数和触发器创建脚本: DROP TRIGGER
PostgreSQL 的默认空闲连接超时是多少,我运行了 show idle_in_transaction_session_timeout 查询并返回了 0,但是值 0 表示此选项被禁用,但我想知道默
我需要将十六进制值存储到数据库表中,谁能推荐我需要用于属性的数据类型? 提前致谢 最佳答案 您可以使用bytea 来存储十六进制格式。更多信息 can be found in the postgres
我有一个具有复合主键的(大)表,由 5 列(a、b、c、d、e)组成。 我想高效地选择具有其中两列 (a + e) 的所有行到给定值。 在 PostgreSQL 中,我需要索引吗?或者数据库会使用主键
在阅读 PostreSQL (13) 文档时,我遇到了 this页面,其中列出了不同日期时间类型的存储大小。 除其他外,它指出: Name Storag
我有两个大整数的巨大表(500 000 000 行)。两列都被单独索引。我正在使用语法批量插入此表: INSERT into table (col1, col2) VALUES(x0, y0), (x
有一台 CentOS7 Linux 机器正在运行(不是由我管理;拥有有限的权限)。 请求在其中设置 PostgreSQL。 刚刚从 CentOS 存储库安装了 PostgreSQL: sudo yum
我在 Ubuntu 18.04 上安装了 Postgresql 10,但不知何故坏了,不会重新启动。我可以重新安装它而不破坏它的数据库,以便我可以再次访问数据库吗? pg_dump 不起作用。 最佳答
我想在 UNIX 中使用 crontab 自动备份 PostgreSQL 数据库。我已经尝试过,但它会创建 0 字节备份。 我的 crontab 条目是: 24 * * * * /home/desk
我已经完成了PG服务器的安装。我希望能够使用 pgAdmin 远程连接到它,但不断收到服务器不听错误。 could not connect to server: Connection refused
Oracle 支持波斯历但需要知道 PostgreSQL 是否支持波斯历? 如果是,那么我们如何在 PostgreSQL 中将默认日历类型设置为 Persian 而不是 Gregorian(在 Ora
假设我们有一个带有表的 SQL 数据库 Person以及访问它的几个应用程序。出于某种原因,我们想修改 Person表以向后不兼容的方式。 保持兼容性的一种潜在解决方案是将表重命名为 User并创建一
我使用 PostgreSQL 中的模式来组织我庞大的会计数据库。每年年底,我都会通过为下一年创建一个新模式来进行协调过程。 新模式的文件是否与旧模式物理分离?或者所有模式一起存储在硬盘上? 这对我来说
我正在尝试使用配置文件中的以下配置参数调整 PostgreSQL 服务器: autovacuum_freeze_max_age = 500000000 autovacuum_max_workers =
我的数据包含数据库列中的表情符号,即 message_text ------- 🙂 😀 Hi 😀 我只想查询包含表情符号的数据的行。在 postgres 中是否有一种简单的方法可以做到这一点?
我是一名优秀的程序员,十分优秀!