بسيطة SQL البرمجية يتهرب مني..النقابة غير متطابقة اثنين من الجداول
-
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)
للقيم المفقودة