نمایش نتایج 1 تا 4 از 4

نام تاپیک: Select تو در تو

  1. #1

    Select تو در تو

    با سلام خدمت دوستان عزیزم

    من سه تا جدول دارم اولی بیماری دومی نشانه های بیماری و سومی جدول رابطه بین بیماری و نشانه
    من نام بیماری ای رو می خوام که مثلا سه تا نشانه داره سردرد و تب و حالت تهوع

    جدول بیماری
    کد نام بیماری
    1 سرما خوردگی
    2 التهاب
    3 آلرژی


    جدول نشانه ها
    کد نشانه
    1 سرگیجه
    2 ضعف
    3 تب
    4 سردرد
    5 حالت تهوع

    جدول رابطه
    کد کد بیماری کد نشانه
    1 1 3
    2 1 4
    3 1 5
    و ....
    این رو چه جوری سلکت کنم

  2. #2

    نقل قول: Select تو در تو

    ساده ترین حالتش میتونه بصورت زیر باشه. با چه ورژنی از SQL Server کار میکنید؟

    Select
    *
    From
    RelationTable R INNER JOIN Sick S
    On
    R.SickId = S.ID
    INNER JOIN Symptom SY
    On
    R.SyId = SY.ID
    Where
    (Select SymptonName + ','
    From
    Symptom INNER JOIN RelationTable
    On
    R.SyId = SY.ID
    For Xml Path('')) LIKE '%سردرد%حالت تهوع%تب%'

  3. #3
    کاربر تازه وارد آواتار iman_Delphi
    تاریخ عضویت
    اسفند 1388
    محل زندگی
    زیر پوست شهر
    پست
    89

    نقل قول: Select تو در تو

    1 - احساس ميكنم جدول سوم از نظر normalization داراي مشكل باشه و بعدا" يه مقداري اذيتتون كنه


    2- اينم جوابتون

    Select * From (Select نام بيماري ,(Select count(*) from جدول رابطه ها Where كد بيماري = كد بيماري and (كد نشانه = سردرد  or كد نشانه = تب  or كد نشانه  = تهوع)) as tedadebimari from جدول بيماري ها) as SELECTINSIDE
    Where tedadebimari =>3

  4. #4
    کاربر دائمی
    تاریخ عضویت
    مرداد 1389
    محل زندگی
    تهران
    سن
    47
    پست
    182

    نقل قول: Select تو در تو

    به نظر من طراحی جداول از نظر نرمال سازی مشکلی نداره.

    اما سوالی که برام پیش اومد اینه که آیا این که می گید بیماری ای رو می خواید که سه نشانه داشته باشه، مقصودتون اینه که سه نشانه ی به خصوص و دقیقاً مشخص رو داشته باشه یا هر بیماری ای رو می گید که به هر حال حداقل سه تا نشانه داشته باشه.

    اگه مقصودتون سه نشانه به خصوصه، با عملگر and در قسمت where می تونید این محدودیت رو اعمال کنید.
    بیماری ای که دقیقاً نشانه A «و» و نشانه B «و» و C رو داشته باشه:

    select d.* from Disease d inner join Disease_Sign ds on d.DiseaseID = ds.DiseaseID inner join Sign s on ds.SignID = s.SignID
    where s.Title = 'A' and s.Title = 'B' and s.Title = 'C'


    اگر مقصودتون تعداد نشانه ها است با group by و having راحت می تونید به جواب برسید:

    select d.Title from Disease d inner join Disease_Sign ds on d.DiseaseID = ds.DiseaseID
    group by d.Title
    having count(d.Title) >= 3

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •