SQL qaerda kerakli yordam kerak

    A   B   C
1   bob 55  0
2   bob 55  1

Menga qaerdan yordam so'rash kerak. Yuqoridagi misolda Bobning ikkita yozuvi mavjud. Faqatgina Bobning yozuvlari S ustunida 1 qiymatiga ega bo'lsa, yozuvlarni ko'rsatishni istayman. Agar Bobning yozuvlaridan biri qiymati 0 bo'lsa, Bob uchun hech narsa qaytarilmasligi kerak. Hozirda men uni bitta qiymatga ega bo'lgan bitta rekordni qaytarib olish imkoniyatiga ega bo'ldim.

Mavjud so'rov

select a, b, c
from table
where b = 55 and c = 1
1
Shunday qilib, - 0 va 1 qiymatlari C ustidagi yagona mumkin. null bo'lishi mumkinmi? Bundan tashqari, A yoki B ham null bo'lishi mumkinmi? Va agar sizda bob 55 1 bilan ikkita bir xil satr mavjud bo`lsa, ikkalasini ham qaytarishingiz kerakmi? (Ya'ni, agar ular mavjud bo'lsa, tayanch stolidagi dublikatlarni saqlab qo'ying) Yoki kirishlardagi dublikatlar bo'lmasligi kafolatlanganmi?
qo'shib qo'ydi muallif mathguy, manba
Shunday qilib, - 0 va 1 qiymatlari C ustidagi yagona mumkin. null bo'lishi mumkinmi? Bundan tashqari, A yoki B ham null bo'lishi mumkinmi? Va agar sizda bob 55 1 bilan ikkita bir xil satr mavjud bo`lsa, ikkalasini ham qaytarishingiz kerakmi? (Ya'ni, agar ular mavjud bo'lsa, tayanch stolidagi dublikatlarni saqlab qo'ying) Yoki kirishlardagi dublikatlar bo'lmasligi kafolatlanganmi?
qo'shib qo'ydi muallif mathguy, manba
Shunday qilib, - 0 va 1 qiymatlari C ustidagi yagona mumkin. null bo'lishi mumkinmi? Bundan tashqari, A yoki B ham null bo'lishi mumkinmi? Va agar sizda bob 55 1 bilan ikkita bir xil satr mavjud bo`lsa, ikkalasini ham qaytarishingiz kerakmi? (Ya'ni, agar ular mavjud bo'lsa, tayanch stolidagi dublikatlarni saqlab qo'ying) Yoki kirishlardagi dublikatlar bo'lmasligi kafolatlanganmi?
qo'shib qo'ydi muallif mathguy, manba
0 va 1-ustunidagi yagona mumkin bo'lgan qiymatlar.
qo'shib qo'ydi muallif user3007002, manba
0 va 1-ustunidagi yagona mumkin bo'lgan qiymatlar.
qo'shib qo'ydi muallif user3007002, manba
0 va 1-ustunidagi yagona mumkin bo'lgan qiymatlar.
qo'shib qo'ydi muallif user3007002, manba
0 va 1-ustunidagi yagona mumkin bo'lgan qiymatlar.
qo'shib qo'ydi muallif user3007002, manba

16 javoblar

Eng oddiy usul mavjud emas dan foydalanishi mumkin:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.c <> 1
                 );
1
qo'shib qo'ydi
Yordamingiz uchun barchangizga rahmat!
qo'shib qo'ydi muallif user3007002, manba

Eng oddiy usul mavjud emas dan foydalanishi mumkin:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.c <> 1
                 );
1
qo'shib qo'ydi
Yordamingiz uchun barchangizga rahmat!
qo'shib qo'ydi muallif user3007002, manba

Eng oddiy usul mavjud emas dan foydalanishi mumkin:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.c <> 1
                 );
1
qo'shib qo'ydi
Yordamingiz uchun barchangizga rahmat!
qo'shib qo'ydi muallif user3007002, manba

Eng oddiy usul mavjud emas dan foydalanishi mumkin:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.c <> 1
                 );
1
qo'shib qo'ydi
Yordamingiz uchun barchangizga rahmat!
qo'shib qo'ydi muallif user3007002, manba

Men biroz o'zgartirilgan SQL taklif qilaman (Gordon tomonidan WHERE qoidasi spec'd):

select t.a, t.b, t.c
from table t
where t.b = 55 and t.c = 1 and not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.b = t.b and t2.c = 0
                 );

Massimino echimi ham ishlaydi, chunki ustunli c faqat 1 yoki 2 qiymatiga ega.

1
qo'shib qo'ydi
"1 yoki 0 ning qiymatlari" degani, albatta.
qo'shib qo'ydi muallif datadevelopr, manba

Men biroz o'zgartirilgan SQL taklif qilaman (Gordon tomonidan WHERE qoidasi spec'd):

select t.a, t.b, t.c
from table t
where t.b = 55 and t.c = 1 and not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.b = t.b and t2.c = 0
                 );

Massimino echimi ham ishlaydi, chunki ustunli c faqat 1 yoki 2 qiymatiga ega.

1
qo'shib qo'ydi
"1 yoki 0 ning qiymatlari" degani, albatta.
qo'shib qo'ydi muallif datadevelopr, manba

Men biroz o'zgartirilgan SQL taklif qilaman (Gordon tomonidan WHERE qoidasi spec'd):

select t.a, t.b, t.c
from table t
where t.b = 55 and t.c = 1 and not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.b = t.b and t2.c = 0
                 );

Massimino echimi ham ishlaydi, chunki ustunli c faqat 1 yoki 2 qiymatiga ega.

1
qo'shib qo'ydi
"1 yoki 0 ning qiymatlari" degani, albatta.
qo'shib qo'ydi muallif datadevelopr, manba

Men biroz o'zgartirilgan SQL taklif qilaman (Gordon tomonidan WHERE qoidasi spec'd):

select t.a, t.b, t.c
from table t
where t.b = 55 and t.c = 1 and not exists (select 1
                  from t t2
                  where t2.a = t.a and t2.b = t.b and t2.c = 0
                 );

Massimino echimi ham ishlaydi, chunki ustunli c faqat 1 yoki 2 qiymatiga ega.

1
qo'shib qo'ydi
"1 yoki 0 ning qiymatlari" degani, albatta.
qo'shib qo'ydi muallif datadevelopr, manba

Bitta yozuvga teng bo'lgan yozuvlarni topadigan pastki so'rov yaratishingiz mumkin. Agar shunday bo'lsa, siz ularni qo'shmasligingiz kerak.

    select a, b, c
    from table as t
    where not exists (
       select * 
       from table as t1 
       where t.a = t1.a and IsNull(t1.c, -1) <> 1
    )

Shu tariqa, ustunlar uchun qanday qiymatlar paydo bo'lishi muhim emas, ular sizning ma'lumotlaringiz bilan tanish bo'lmagan taqdirda ham bir nulls olsa ham, ular rekord o'rnatadilar. Qavslar ichidagi pastki so'rovlar boshqa sinov mezonlarini tekshirish yoki tekshirish uchun o'zi tomonidan boshqarilishi mumkin.

Siz ushbu jadvalga o'zingiz qo'shilishingiz va shunga o'xshash narsalar qilishingiz mumkin, lekin men bu kod misoli niyatni ko'rsatmoqdaman deb o'ylayman.

0
qo'shib qo'ydi

Bitta yozuvga teng bo'lgan yozuvlarni topadigan pastki so'rov yaratishingiz mumkin. Agar shunday bo'lsa, siz ularni qo'shmasligingiz kerak.

    select a, b, c
    from table as t
    where not exists (
       select * 
       from table as t1 
       where t.a = t1.a and IsNull(t1.c, -1) <> 1
    )

Shu tariqa, ustunlar uchun qanday qiymatlar paydo bo'lishi muhim emas, ular sizning ma'lumotlaringiz bilan tanish bo'lmagan taqdirda ham bir nulls olsa ham, ular rekord o'rnatadilar. Qavslar ichidagi pastki so'rovlar boshqa sinov mezonlarini tekshirish yoki tekshirish uchun o'zi tomonidan boshqarilishi mumkin.

Siz ushbu jadvalga o'zingiz qo'shilishingiz va shunga o'xshash narsalar qilishingiz mumkin, lekin men bu kod misoli niyatni ko'rsatmoqdaman deb o'ylayman.

0
qo'shib qo'ydi

Bitta yozuvga teng bo'lgan yozuvlarni topadigan pastki so'rov yaratishingiz mumkin. Agar shunday bo'lsa, siz ularni qo'shmasligingiz kerak.

    select a, b, c
    from table as t
    where not exists (
       select * 
       from table as t1 
       where t.a = t1.a and IsNull(t1.c, -1) <> 1
    )

Shu tariqa, ustunlar uchun qanday qiymatlar paydo bo'lishi muhim emas, ular sizning ma'lumotlaringiz bilan tanish bo'lmagan taqdirda ham bir nulls olsa ham, ular rekord o'rnatadilar. Qavslar ichidagi pastki so'rovlar boshqa sinov mezonlarini tekshirish yoki tekshirish uchun o'zi tomonidan boshqarilishi mumkin.

Siz ushbu jadvalga o'zingiz qo'shilishingiz va shunga o'xshash narsalar qilishingiz mumkin, lekin men bu kod misoli niyatni ko'rsatmoqdaman deb o'ylayman.

0
qo'shib qo'ydi

Bitta yozuvga teng bo'lgan yozuvlarni topadigan pastki so'rov yaratishingiz mumkin. Agar shunday bo'lsa, siz ularni qo'shmasligingiz kerak.

    select a, b, c
    from table as t
    where not exists (
       select * 
       from table as t1 
       where t.a = t1.a and IsNull(t1.c, -1) <> 1
    )

Shu tariqa, ustunlar uchun qanday qiymatlar paydo bo'lishi muhim emas, ular sizning ma'lumotlaringiz bilan tanish bo'lmagan taqdirda ham bir nulls olsa ham, ular rekord o'rnatadilar. Qavslar ichidagi pastki so'rovlar boshqa sinov mezonlarini tekshirish yoki tekshirish uchun o'zi tomonidan boshqarilishi mumkin.

Siz ushbu jadvalga o'zingiz qo'shilishingiz va shunga o'xshash narsalar qilishingiz mumkin, lekin men bu kod misoli niyatni ko'rsatmoqdaman deb o'ylayman.

0
qo'shib qo'ydi

Quyidagilardan tashqari EXISTS ni ishlating

  select a, b, c
  from table t
  where t.b = 55 and not exists (select 1 from table t2 
  where t2.b=t.b and t2.c=0)
0
qo'shib qo'ydi

Quyidagilardan tashqari EXISTS ni ishlating

  select a, b, c
  from table t
  where t.b = 55 and not exists (select 1 from table t2 
  where t2.b=t.b and t2.c=0)
0
qo'shib qo'ydi

Quyidagilardan tashqari EXISTS ni ishlating

  select a, b, c
  from table t
  where t.b = 55 and not exists (select 1 from table t2 
  where t2.b=t.b and t2.c=0)
0
qo'shib qo'ydi

Quyidagilardan tashqari EXISTS ni ishlating

  select a, b, c
  from table t
  where t.b = 55 and not exists (select 1 from table t2 
  where t2.b=t.b and t2.c=0)
0
qo'shib qo'ydi