匹配两个表中的值查询(SQL和ColdFusion)

时间:2008-10-15 17:44:52

标签: sql excel coldfusion

我有一个查询,其中包含基本值列表和语言值列表。每个值都有一个与另一个匹配的键。基值存储在一个表中,语言值存储在另一个表中。我的问题是我需要从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

3 个答案:

答案 0 :(得分:1)

Hrm,仍然不清楚问题究竟是什么,但让我试一试。

表:

BASE_VALUES
------------------
BASE_VALUE_RK
BASE_VALUE_NAME

RESOURCE_VALUES (these are the translations, I'm guessing)
-----------------------
RESOURCE_KEY
RESOURCE_LANGUAGE_ID
RESOURCE_VALUE

您想要检索一个基本值以及与该基本值匹配的所有相应翻译值,将它们导出为ex​​cel,然后通过更新重新加载它们(我认为)。

SQL to SELECT out data:

SELECT 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'
 ORDER BY 1;

那会给你:

1234    Foo
1235    Bar
1236    Baz

将其导出为ex​​cel,并通过更新将其恢复:

1234    Goo
1235    Car
1236    Spaz

然后你可以说:

UPDATE RESOURCE_VALUES
   SET RESOURCE_VALUE = value_from_spreadsheet
 WHERE RESOURCE_KEY = key_from_spreadsheet

我可能会偏离这个家伙,所以让我知道,如果你能提供更多的细节,我可能会得分更接近标记。

干杯!

答案 1 :(得分:0)

如果您需要删除除一个之外的所有匹配项,为什么不删除所有匹配的...匹配...我们需要更好的术语...然后插入正确的匹配项。 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);

我可能过于简单了,但你的描述似乎含糊不清。

答案 2 :(得分:0)

嘿谢谢你的更新!

看着它并将其添加到上一篇文章中我终于想出了这个:

<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。

花了一段时间,对不起的解释感到抱歉,但就是这样! :)感谢您的帮助。