两个表查询(SQL 和 ColdFusion)中的匹配值
Posted
技术标签:
【中文标题】两个表查询(SQL 和 ColdFusion)中的匹配值【英文标题】:Matching values in two tables query (SQL and ColdFusion) 【发布时间】:2008-10-15 17:44:51 【问题描述】:我有一个包含基本值列表和语言值列表的查询。每个值都有一个与之匹配的键。基本值存储在一个表中,语言值存储在另一个表中。我的问题是我需要从 QUERY 中删除所有匹配的基值,除了一个。然后,我将该查询导出到 Excel 电子表格(我可以很好地完成这部分)并允许用户编辑语言值。
当用户编辑和/或插入新的语言值时,我需要更新数据库,除了现在覆盖数据库中的任何匹配值(如第一次删除的值)。
简单来说,客户支付翻译费用,如果我可以生成所需翻译较少的工作表(例如经常重复出现的短语),那么他们可以节省资金,因此可以开始项目。我意识到缺点是它不是一个真正的链表,所有匹配的值都属于语言表中的一行(这很容易)。相反,有多个相同的值需要如上所述更新。
是的,我对此感到困惑,这就是为什么它看起来有点模糊。这是一个示例:
Table 1
Item Description1
Item Description2
Item Description3
Item Description2
Item Description2
Item Description4
Item Description5
Item Description6
Item Description3
Table 2
Item Desc in other Language1
Item Desc in other Language2
Item Desc in other Language3 (blank)
Item Desc in other Language3
Item Desc in other Language4
Item Desc in other Language5
*blank*
期望的结果(查询时)
表 1 项目描述1 项目描述2 项目描述3 项目描述4 项目描述5 物品描述6
Table 2
Item Desc in other Language1
Item Desc in other Language2
Item Desc in other Language3 (filled by matching row in Table 2)
Item Desc in other Language4
Item Desc in other Language5
Item Desc in other Language6 (blank, returned as empty string)
用户进行修改,包括将数据插入空白行(如语言的第 6 行),然后重新上传:
Table 1
Item Description1
Item Description2
Item Description3
Item Description2
Item Description2
Item Description4
Item Description5
Item Description6
Item Description3
Table 2
Item Desc in other Language1
Item Desc in other Language2
Item Desc in other Language3 (now matches row below)
Item Desc in other Language3
Item Desc in other Language4
Item Desc in other Language5
Item Desc in other Language6 (new value entered by user)
还有一个资源键将每个“项目描述”与单个“其他语言的项目描述”相匹配。他们唯一一次见面是在这个翻译过程中,所有其他时间的值可能不同,所以资源键不能简单地永久更改为一个翻译的所有点。
我还要补充一点,不应该改变表格的结构或删除表格的行。
好的,这是我希望查询执行的更新修订,但显然不这样做,因为我实际上需要连接表的值:
SELECT pe.prodtree_element_name_l, rs.resource_value, pe.prodtree_element_name_l_rk
FROM prodtree_element pe
LEFT JOIN resource_shortstrings rs
ON pe.prodtree_element_name_l_rk = rs.resource_key
WHERE rs.language_id = '5'
AND pe.prodtree_element_name_l <> ''
GROUP BY pe.prodtree_element_name_l
【问题讨论】:
【参考方案1】:嗯,还不是很清楚问题到底是什么,但让我试一试。
表格:
BASE_VALUES ------------------ BASE_VALUE_RK BASE_VALUE_NAME RESOURCE_VALUES(这些是翻译,我猜) ---------------------- RESOURCE_KEY RESOURCE_LANGUAGE_ID RESOURCE_VALUE您想检索一个基值,以及与该基值匹配的所有相应翻译值,将它们导出到 excel,然后通过更新重新加载它们(我认为)。
SQL 选择数据:
选择 bv.BASE_VALUE_RK、rv.RESOURVE_VALUE FROM BASE_VALUE bv,RESOURCE_VALUE rv WHERE bv.BASE_VALUE_RK = rv.RESOURCE_KEY AND rv.resource_language_id = '5' 按 1 排序;这会给你:
第1234章 1235酒吧 第1236章将其导出为 excel,并通过更新将其取回:
第1234章 咕 1235车 第1236章然后你可以说:
更新 RESOURCE_VALUES SET RESOURCE_VALUE = value_from_spreadsheet WHERE RESOURCE_KEY = key_from_spreadsheet我可能离这个人有点远,所以请告诉我,如果你能提供更多细节,我可能会更接近分数。
干杯!
【讨论】:
【参考方案2】:如果您需要删除除一个之外的所有匹配项,为什么不删除所有匹配项……匹配项……我们需要更好的术语……然后插入正确的项。 EG,如果您需要更新碱基对表中第 12 项和第 13 项之间的匹配,请执行以下操作
delete from matchtable where (id1 = 12 and id2 = 13) or (id1 = 13 and id2 = 13);
insert into matchtable (id1, id2) values (12, 13);
我可能过于简单化了,但您的描述似乎有些地方含糊不清。
【讨论】:
【参考方案3】:您好,感谢您的更新!
查看并添加到之前的帖子中,我终于想到了这个:
<cfquery name="getRows" datasource="XXXX">
SELECT pe.prodtree_element_name_l, MAX(rs.resource_value) AS resource_value
FROM prodtree_element pe
LEFT JOIN resource_shortstrings rs
ON pe.prodtree_element_name_l_rk = rs.resource_key
WHERE rs.language_id = '5'
AND pe.prodtree_element_name_l <> ''
GROUP BY prodtree_element_name_l
</cfquery>
我意识到我不需要特定的 resource_value,只需要其中的任何东西。我还意识到在查询之外我根本不需要资源键。无论如何,更新都会更新所有匹配的基值,所以我根本不需要资源键,这让我可以使用 GROUP BY。
稍等片刻,抱歉解释不佳,但就是这样! :) 感谢所有的帮助。
【讨论】:
以上是关于两个表查询(SQL 和 ColdFusion)中的匹配值的主要内容,如果未能解决你的问题,请参考以下文章