سؤال

Select a, b, c from table where a in (1, 2, 3)

ماذا لو كانت القائمة في عمود؟

أحاول أن هذا سيؤدي إلى الخطأ:

Select a, b, c from a in b

آسف لعدم مسح سؤالي.

انها ليست حول انضم أو في (حدد B من الجدول)

العمود B Type هو NVARCHAR، البيانات هي قائمة، مثل هذا '1،2،5'

العمود نوع هو int.

لا يوجد حل صحيح

نصائح أخرى

بعد قراءة سؤالك، هذا هو ما تريد:

SELECT
    a,b,c
FROM
    tblA
WHERE
    b LIKE CAST(a as nvarchar) + ',%'
    OR b LIKE '%,' + CAST(a as nvarchar) + ',%'
    OR b LIKE '%,' + CAST(a as nvarchar)

يجب أن تفعل ذلك.

العديد من الإجابات التي يشير في الاتجاه الصحيح، لكنني أعتقد أن هذا سوف يعمل حقا:

SELECT a, b, c
FROM table
WHERE ',' + b + ',' LIKE '%,' + CAST(a as varchar) + ',%'

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

في SQL، عادة ما يكون العمود واحد من أنواع البيانات "العددية" المزعومة: الأرقام، التاريخ / الوقت، السلاسل - انظر على سبيل المثال MSDN.. وبعد إذا شرحت بشكل أفضل في معنى أنك حصلت على "قائمة" في العمود b, ، وكيف، على سبيل المثال أظهر لنا CREATE TABLE a بيان، ربما يمكننا مساعدتك بشكل أفضل!

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

أعتقد أنك تريد الانضمام إلى الجداول؟

SELECT a, b, c
FROM a
JOIN b ON a.ID=b.ID
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top