بسيطة SQL البرمجية يتهرب مني..النقابة غير متطابقة اثنين من الجداول

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

  •  19-08-2019
  •  | 
  •  

سؤال

أنا اختيار 1 من الجدول 1 و تخزينه في الجدول المؤقت.

في بعض الأحيان هذا الجدول ينتهي مع 0 الصفوف.

أريد أن أضيف أن حقل إلى جدول آخر يحتوي على 20+ الميادين

العادية الاتحاد لن يعمل بالنسبة لي لأن من ميدان # عدم تطابق.الخارجي متعود العمل بالنسبة لي لأنه لا يوجد شيء للمقارنة.NVL لا يعمل على أول درجة الحرارة الجدول.

أحد يعرف كيف نفعل ذلك ؟

تحديث:

فاتني أن أذكر....عندما يكون الجدول أن يسترد 1 ميدان يرى مباراة في حالات أخرى ، هذا الرمز أن أنا باستخدام يعمل الآن....

SELECT DISTINCT reqhead_rec.resp_name<br>
FROM reqhead_rec, biglist<br>
WHERE reqhead_rec.req_no = biglist.req_no
 AND reqhead_rec.frm = biglist.req_frm<br>
INTO TEMP grabname with no log;

SELECT biglist.*, grabname.resp_name<br>
FROM biglist, grabname<br>
ORDER BY prnt_item, account_amt<br>
INTO TEMP xxx with no log;
هل كانت مفيدة؟

المحلول

ما الميدانية أن تتطابق مع ؟ راجع للشغل, هنا كيف أن خط لهم:

SELECT NULL, NULL, NULL, NULL, MySingleField, NULL, NULL, NULL... FROM #temp
UNION ALL
SELECT Col1, Col2, Col3, Col4, Col5, Col6,... FROM OtherTable

تحديث:

حسنا, بعد قراءة التحديث...أنا لا أعتقد أنك تريد الاتحاد في كل شيء ، بل هي بسيطة بشكل لا يصدق SUBSELECT

SELECT
    *,
    (SELECT TOP 1 Name FROM Blah WHERE Blah.SomeID = MyTable.SomeID) AS ExtraCol
FROM
    MyTable

نصائح أخرى

يبدو أنك لا تريد الانضمام ، وليس الاتحاد.

أنت لا تحتاج إلى مقارنة أي شيء للقيام الانضمام.كنت في نهاية المطاف مع الصليب المنتج إذا قمت بتحديد أي شرط الانضمام:

SELECT t20.*, t1.*
FROM table_with_20_columns AS t20
  LEFT OUTER JOIN temp_table_with_1_column AS t1 ON (1=1);

عندما يكون هناك صفر الصفوف في الجدول المؤقت سيكون كما ذكرت فارغة في نتيجة الاستعلام أعلاه.

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

تحرير: الانضمام الشرط الوارد في ON أو USING شرط أن يكون اختياري وفقا SQL القياسية, ولكن على الأقل أنا اختبار في MySQL 5.0 انه خطأ في بناء جملة حذف هذا الشرط.ولكن يمكنك استخدام ON (1=1).

تحرير: الإجابة على سؤالك في تعليق:

SELECT COALESCE(reqhead_rec.resp_name, dflt.resp_name) AS resp_name
FROM (SELECT 'default name' AS resp_name) dflt
  LEFT OUTER JOIN reqhead_rec ON (1=1)
WHERE reqhead_rec.req_no = biglist.req_no AND reqhead_rec.frm = biglist.req_frm 
INTO TEMP grabname WITH NO LOG;

في الواقع, كنت قد تكون قادرة على تخطي درجة الحرارة الجدول تماما.فقط غادر إلى الجدول الرئيسي إلى reahead_rec.وضعت هذه الشروط في ON شرط الانضمام ، وليس في WHERE البند.ثم استخدام COALESCE() في تحديد قائمة من هذا الاستعلام إلى إعطاء الاسم الافتراضي عندما لم يتم العثور على في الجدول الآخر.

SELECT b.*, COALESCE(r.resp_name, 'default name') AS resp_name
FROM biglist AS b
  LEFT OUTER JOIN reqhead_rec AS r
    ON (b.req_no = r.req_no AND r.frm = b.req_frm)
INTO TEMP xxx WITH NO LOG;

حاول اختيار nvl(NULL,NULL) للقيم المفقودة

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