SQL 左连接将多行合并为一行

2023-12-25

基本上,我有两个表,表 A 包含我想要取出的实际项目,表 B 用于语言翻译。

例如,表 A 包含实际内容。每当在表中使用文本时,都会存储与表 B 中存储的文本相关的 id,而不是存储实际的 varchar 值。这使我可以通过向表 B 中添加 languageID 列,为表中的同一行提供多个翻译。数据库。

Example:

Table A

  • 标题(整数)
  • 说明(整数)
  • 其他数据....

Table B

  • TextID (int) - 这是列 其值存储在其他表中
  • 语言 ID (int)
  • 文本(varchar)

我的问题更多的是呼吁就如何最好地处理这个问题提出建议。理想情况下,我想要一个可以用来从表中进行选择的查询,并从表中获取文本而不是文本的 id。目前,当我在表中有两个文本项时,我会这样做:

SELECT C.ID, C.Title, D.Text AS Description
FROM
(SELECT A.ID, A.Description, B.Text AS Title
FROM TableA A, TranslationsTable B
WHERE A.Title = B.TextID AND B.LanguaugeID = 1) C
LEFT JOIN TranslationsTable D
ON C.Description = D.TextID AND D.LanguaugeID = 1

此查询为我提供了表 A 中我正在查找的行(使用内部 select 语句中的 where 语句)以及基于所使用的语言 ID(而不是文本 ID)的实际文本。

当我只使用一个或两个需要翻译的文本项时,这种方法效果很好,但添加第三个或更多项时,它开始变得非常混乱 - 本质上是示例顶部的另一个左连接。

关于更好的查询的任何建议,或者至少是处理单行中 3 个或更多文本项的好方法?

根据建议,我添加了两个表的示例:

    Table A  
    ---------------------------
    ID    |Title    |Description  
    ---------------------------  
    1     |1        |2  
    ---------------------------  
    2     |3        |4  
    --------------------------- 

    Table B (Translations Table) 
    ---------------------------
    ID    |LanguaugeID|Text  
    ---------------------------  
    1     |1        |Here is title one
    ---------------------------  
    1     |2        |Here is a title one in espanol
    ---------------------------
    2     |1        |Here is description one
    ---------------------------  
    2     |2        |Here is description one in espanol
    ---------------------------
    3     |1        |Title 2
    ---------------------------  
    4     |1        |Description 2
    ---------------------------   

我想要的是能够从表 A 中提取一行,该行已经包含表 B 中的文本,而不仅仅是 ids - 并且能够对需要翻译的多个列执行此操作。


听起来您希望从将一些行数据转换为列数据中受益。在这种情况下,请在此处查找 PIVOT 功能

http://msdn.microsoft.com/en-us/library/ms177410.aspx http://msdn.microsoft.com/en-us/library/ms177410.aspx

您可以编写一个查询来透视文本,以便获得以下输出

ID, Title, Description, LanguageId, Text1, Text2, Text3, Text4

SQL 中数据透视表的唯一缺点是您必须事先确定数据透视表列的数量(当您编写查询时)。但是,您可以通过编写动态 SQL 来克服这个问题。

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

SQL 左连接将多行合并为一行 的相关文章

  • 如何有效地从 DB2 表中删除所有行

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

    我只是想了解数据库连接池的概念以及它是如何实现的 数据库联系池是一种用于保持数据库连接打开的方法 以便其他人可以重用它们 通常 打开数据库连接是一项昂贵的操作 尤其是在数据库位于远程的情况下 您必须打开网络会话 进行身份验证 检查授权等等
  • 如何在SSRS中的表上创建热图?

    如何在 SSRS 中创建这样的内容 颜色将根据行中的值 承销商 从红色变为绿色 所有这些都在一个组中 您可以通过右键单击各个单元格并根据表达式设置填充颜色来完成此操作 In the Image below I ve mistakingly
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • 使用两个日期之间的随机日期时间更新每一行

    我有一个专栏叫date created我希望每一行保存一个随机日期 日期距当前时间为 2 天 我正在运行以下查询 但它会更新具有相同随机日期的所有行 我希望每一行都是随机的并且不相同 update table set date create
  • 如何在SSRS 2012中显示基于总金额的前10名

    我只需要显示前 10 名Class基于Total SUM Premium 柱子 我转到类代码属性组 gt 过滤器并按 SUM Net Written Premium 设置前 10 名 但它不起作用 我只需要显示前 10 名 而且总金额也应该
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • 拆分列中的字符串并在列中添加值

    我有一个包含几行数据的表 如下所示 16 W 2 Work ALBO 00 Proposal ALxO Amendement 1 20091022 signed pdf 17 W 2 Work ALBO 00 Proposal Level1
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 如何在列上创建外键,该列的每条记录都可能引用多个表之一中的列?

    我正在创建一个社交网络 它有新闻 照片等多个实体 可以有评论 由于所有评论都具有相同的列并且行为方式相同 唯一的区别是它们的类型 新闻 照片或将来添加的其他内容 我决定为所有评论创建一个表 其中的列名为type 它工作得很好 直到我决定将外
  • 在sqlite SQL语句中与order by子句结合使用limit

    下面的两条 SQL 语句总是会产生相同的结果集吗 1 SELECT FROM MyTable where Status 0 order by StartTime asc limit 10 2 SELECT FROM SELECT FROM
  • sql server 按组排名

    问题看似简单 但我却无法理解 这是针对 sql 服务器的 what I have in a table What I need as a output cksum id cksum id 2162514679 204 2162514679
  • 有没有办法以编程方式轻松更改多个 SSIS 包上的服务器名称?

    作为发布周期的一部分 我们正在创建多个 SSIS 包来迁移大型数据库 我们最终可能会得到大约 5 10 个 SSIS 包 由于我们有 4 个环境 开发 QA 登台 生产等 是否有一种有效的方法可以在每个 SSIS 包经历不同的服务器环境时更
  • 使用 where 进行 select 语句时,HSQLDB 用户缺乏权限或未找到对象错误

    我的数据库使用 SQuirrel SQL 客户端版本 3 5 3 和 HSQLDB 我已经能够为其指定相应的驱动程序 内存中 并创建一个别名 我创建了一个表 CREATE TABLE ENTRY NAME VARCHAR 100 NOT N

随机推荐

  • MVC3 - AJAX 部分视图正在缓存......我无法阻止它

    我正在使用 MVC3 我有一个 javascript 函数 它使用 jQuery get 从控制器获取 PartialView 问题是它正在被缓存 并且我不断地取回陈旧的内容 我已经在该操作上尝试了 OutputCache Duration
  • r编程:多个子字符串

    我有一个文本文档 我想对其进行子字符串化 我使用以下代码来子串 substr text start start end start 有一个包含 60 个元素的向量 然而 上面的代码只返回等价的substr text 1109 1109 19
  • 如何使用 JavaScript 来 getElementByClass 而不是 GetElementById?

    我试图根据每个 DIV 的类来切换网站上某些 DIV 元素的可见性 我使用一个基本的 JavaScript 片段来切换它们 问题是该脚本仅使用getElementById as getElementByClassJavaScript 不支持
  • varchar(5) 和 varchar(5000) 之间的区别? [复制]

    这个问题在这里已经有答案了 可能的重复 varchar 500 比 varchar 8000 有优势吗 https stackoverflow com questions 2009694 is there an advantage to v
  • 当这个程序在 Windows 上运行时,为什么会出现回车符?

    我编写了以下程序将十六进制字符串转换为相应的二进制数据 include
  • Python 查找和替换脚本中的正则表达式?更新

    我是 Python 脚本新手 所以如果这个问题的答案看起来本质上是显而易见的 请提前原谅我 我正在尝试使用 Python 编写一个大规模的查找和替换脚本 我正在使用类似于以下的代码 infile sys argv 1 charenc sys
  • 将 Metaltexture2d_array 传递给 SceneKit 着色器修改器

    我想创建着色器修改器SCNMaterial with SCNShaderModifierEntryPointSurface 并通过金属texture2d array作为自定义输入 为了实现这一点 我尝试使用类型的键值编码设置参数SCNMat
  • 与屏幕相同的打印 CSS

    似乎确实应该有一个简单的解决方案来解决这个问题 但到目前为止我还没有成功找到一个 我正在使用 Zurb Foundation 基本上是在创建一个实时表单 该表单从表单 上面 中获取输入 并使用 angular js 填充内容 下面 然后 用
  • 如何从使用 Template Haskell 生成的代码创建非 TH 包?

    我正在制作一个小包 它定义元组的包装器并添加它们的实例 例如 newtype Tuple2 a Tuple2 untuple2 a a deriving tuple2 a gt a gt Tuple2 a tuple2 instance T
  • Android 音调生成器崩溃

    几天前 我收到了我发布的应用程序的崩溃日志 错误来自ToneGenerator 我找不到问题所在 在这里 我有一个倒计时器 当计时器达到 0 时 应用程序启动一个 ToneGenerator private void lanceMinute
  • 如何为 Java 类字段生成准确的泛型表达式?

    我试图在运行时推理泛型 有几个很棒的库可以做到这一点 例如 gentyref https code google com p gentyref 同学 https github com cowtowncoder java classmate
  • 如何根据名称为单个条形着色[重复]

    这个问题在这里已经有答案了 我有以下数据框生成以下图 Import pandas library import pandas as pd import numpy as np import matplotlib pyplot as plt
  • 如何启用映射实体的私有属性

    一开始我不得不对我的英语说抱歉 我正在使用实体框架和代码优先的方式 我脑子里有一个想法 但我不知道如何实现它 我不是编程初学者 但我一直在使用流利的 NHibernate 我有一个实体 public class User Key publi
  • Excel 互操作:Range.FormatConditions.Add 抛出 MissingMethodException

    我正在编写一个应用程序 它使用 Microsoft Office Interop Excel 程序集从 Excel 电子表格导出 导入数据 一切都很顺利 除了基于 1 的索引和所有这些可选参数 直到我尝试使用条件格式 当我调用 Range
  • 什么是有效的 HTML5 自定义标签?

    最近 我一直在阅读有关如何通过在名称中添加破折号来使自定义标签在 HTML5 中有效的内容 因此我一直想知道自定义标签的实际规则 指南是什么 custom tag custom X custom custom 我想知道的是最后两个是否有效
  • Apache 和 Node.js 在同一服务器上

    我想使用 Node 因为它速度很快 使用与我在客户端使用的语言相同的语言 并且根据定义它是非阻塞的 但是我雇来编写文件处理程序 保存 编辑 重命名 下载 上传文件等 的人 他想使用 apache 所以 我必须 说服他使用 Node 他对此几
  • 从 groovy 中访问 java 类

    我有一个简单的java类 package test class Hello public static void main String args System out println Hi 我在上面做了一个 javac Hello jav
  • 无法解决联合选择中的排序规则冲突

    我有两个疑问 首先不起作用 select hotels TargetCode as TargetCode from hotels union all select DuplicatedObjects duplicatetargetCode
  • Google Scripts - 在不同的工作表中触发和运行

    我需要 创建一个新工作表 调用主函数 设置一个将调用 main 函数的触发器 基本上是这样的 function new campaign var sheet name new sheet main function sheet name t
  • SQL 左连接将多行合并为一行

    基本上 我有两个表 表 A 包含我想要取出的实际项目 表 B 用于语言翻译 例如 表 A 包含实际内容 每当在表中使用文本时 都会存储与表 B 中存储的文本相关的 id 而不是存储实际的 varchar 值 这使我可以通过向表 B 中添加