سؤال

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

كيف يمكنني أن أفعل هذا؟

هل كانت مفيدة؟

المحلول

استخدم:

ISNULL(count(*), 0)

نصائح أخرى

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

select t1.id, count(t2.id)
from table1 t1
left outer join table2 t2
on t1.id = t2.id
group by t1.id

ISNULL(nullable, value_if_null) لMSSQL، COALESCE(nullable1, nullable2, ..., value_if_null) ل MySQL.

يحرر:كما قيل لي، COALESCE يعمل لكليهما، لذلك سأختار ذلك ليحل محله NULL أعمدة.

الآن أعتقد ذلك COUNT()عمل NULL إرجاع القيم 0 في MySQL أيضًا، لذا فأنا أتفق مع Rashmi.هل يمكن أن تبين لنا الاستعلام والنتيجة المطلوبة؟

ويمكنك استخدام "قضية"

SELECT T1.NAME, CASE WHEN T2.DATA IS NULL THEN 0 ELSE T2.DATA END
FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID

ISNULL في SQL Server و <لأ href = "http://infocenter.sybase.com/help/index.jsp؟topic=/com.sybase.help.ase_15.0.blocks/html/blocks/blocks162.htm" يختلط = "نوفولو noreferrer "> سايبيس . استخدام NVL في أوراكل.

وتلتحم أكثر عبر متوافق من ISNULL أو NVL (يعمل على MSSQL، أوراكل، MySQL، ديربي، وآخرون). لكنني لست متأكدا حول الاختلافات الأداء.

COALESCE(XXX, 0)

ومنها مثلا.

SELECT branch1_id, branch1_name, COALESCE(devnum, 0) FROM
    branch1 as S LEFT JOIN view_inner_zj_devnum as B ON S.branch1_id = B.bid1 GROUP BY branch1_id;

وهذا يعمل بالنسبة لي.

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