مطابقة القيم في جدولين الاستعلام (SQL وكولد فيوجن)

StackOverflow https://stackoverflow.com/questions/205697

  •  03-07-2019
  •  | 
  •  

سؤال

وعندي استفسار يحتوي على قائمة من القيم الأساسية وقائمة من القيم اللغة. كل قيمة لديه مفتاح يطابق إلى أخرى. يتم تخزين القيم الأساسية في جدول واحد والقيم اللغة في بلد آخر. مشكلتي هي أنني بحاجة للحصول على كل القيم قاعدة مطابقة إزالتها من الاستعلام باستثناء واحد. ثم، وتصدير هذا الاستعلام إلى جداول البيانات إكسل (أستطيع أن أفعل هذا الجزء غرامة) وتسمح للمستخدم لتحرير القيم لغة.

عند عمليات التحرير المستخدم و / أو إدراج القيم لغة جديدة، ولست بحاجة لتحديث قاعدة البيانات باستثناء الكتابة الآن أكثر من أي قيم متطابقة في قاعدة البيانات (مثل تلك التي تمت إزالتها مرة الأولى).

في البساطة، يدفع العميل للترجمة وإذا كنت يمكن أن تولد الورقة التي لديها عدد أقل من الترجمات الضرورية (مثل العبارات التي تعود الى الظهور في كثير من الأحيان) ثم يمكنهم توفير المال، وبالتالي المشروع لتبدأ. وأنا أدرك الجانب السلبي هو أنه لا قائمة مرتبطة حقيقية، حيث كل القيم مطابقة جميع تنتمي إلى صف واحد في جدول اللغات (الذي كان من السهل). بدلا من ذلك، هناك العديد من القيم التي هي متطابقة التي تحتاج إلى تحديث كما هو موضح أعلاه.


نعم، أنا في حيرة عليه، والذي هو السبب في أنه قد يبدو غامضا بعض الشيء. وفيما يلي عينة:

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     البند DESCRIPTION1     البند DESCRIPTION2     البند DESCRIPTION3     البند Description4     البند Description5     البند Description6

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 للغة) ثم reuploads:

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)

وهناك أيضا مفتاح مورد يطابق كل "السلعة" إلى "البند تفاصيل في اللغة الأخرى" واحدة. والمرة الوحيدة التي تسير في أي وقت أن نرى بعضنا البعض هو خلال هذه العملية الترجمة وجميع الأوقات الأخرى القيم قد تكون مختلفة، وبالتالي فإن مفاتيح مورد لا يمكن ببساطة أن تتغير إلى كل نقطة في ترجمة واحدة بشكل دائم.

وأود أن أضيف أيضا، ينبغي أن يكون هناك أي تغيير في بنية الجداول أو الصفوف إزالة من الجدول.


وطيب، وهنا لrevisal محدثة ما أود الاستعلام القيام به، ولكن من الواضح أنها لا تفعل منذ أن كنت فعلا بحاجة إلى قيم الجدول انضم:

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

شكرا يا لهذا التحديث!

وبالنظر إلى أن وإضافته إلى الوظيفة السابقة جئت أخيرا مع هذا:

<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 محددة، فقط أي أن كان في هناك. أدركت أيضا لم أكن بحاجة إلى مفتاح الموارد على الإطلاق خارج الاستعلام. التحديث سوف يكون تحديث ALL قيم قاعدة مطابقة بغض النظر، لذلك لم أكن حقا بحاجة الى مفتاح الموارد بعد كل شيء، والذي سمح لي أن استخدام GROUP BY.

واستغرق بعض الوقت، آسف للشرح الفقراء، ولكن هذا هو! :) شكرا على كل المساعدة.

نصائح أخرى

وإدارة الموارد البشرية، لا تزال غير واضحة حقيقية على ما القضية حقا هو، ولكن اسمحوا لي أن إعطائها الذهاب.

والجداول:

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

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

وترغب في استرداد قيمة قاعدة واحدة، وجميع القيم ترجمة المقابلة التي تطابق القيمة الأساسية، تصديرها إلى التفوق، ومن ثم إعادة تحميل بازالتها عن طريق التحديث (على ما أظن).

وSQL لتحديد من البيانات:

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

والتصدير التي على التفوق، والحصول على إعادته مع التحديثات:

1234    Goo
1235    Car
1236    Spaz

ويمكنك بعد ذلك يقول:

UPDATE RESOURCE_VALUES
   SET RESOURCE_VALUE = value_from_spreadsheet
 WHERE RESOURCE_KEY = key_from_spreadsheet

وقد أكون بعيدا قاعدة على هذا الرجل، لذلك اسمحوا لي أن أعرف، وإذا كنت يمكن أن توفر أكثر من ذلك بقليل من التفصيل، قد أكون قادرا على تسجيل أقرب إلى علامة.

وهتاف!

إذا كنت تحتاج إلى إزالة جميع المباريات باستثناء واحد، لماذا لا حذف جميع مطابقة ... مباريات ... نحن بحاجة الى شروط أفضل ... وبعد ذلك تضاف واحدة الصحيح. 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);

وأنا يمكن تبسيط، ولكن وصفك يبدو غامضا في بعض الأماكن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top