数据库多选查询,无法检索所需数据

时间:2015-06-12 20:30:50

标签: sql sql-server database select join

我有下面给出的三个表,我想在单个查询中搜索三个不同自助餐厅的记录,我想搜索记录是否用户给出Brand_Name , Drug_Id, Generic Name它给出相同的输出I.E. all record of That Drug_ID,我是数据库的新手,但我认为我使用Multiple select queries解决了它,但需要花费太多时间

我搜索过&发现联接更快,所以我试图使用它,但永远不会得到确切的答案,

  • 如何解决方案使用多选查询有效
  • 可以使用联接来解决,如果是,那么如果不是,那么为什么不

    Table: Company_List ([Company_ID],[Company_Name],[Company_Address],[Company_Contact],[Company_Website],[Company_Fax])
    
    Table: Drugs_List ([Drug_ID],[Generic_Name],[Dosage_Form],[Max_Course],[Drug_Type],[Adult_Dosage],[Paediatric_Dosage_20Kg],[Neonatal_Dosage_3Kg],[Frequency])
    
    Table: Drug_Details ([Company_ID],[Drug_ID],[Brand_Name],[Package_Size],[Price])
    
  

工作(但需要花费太多时间)

 SELECT distinct(Company_List.Company_Name),
 Drug_Details.* 
 from Drug_Details , Company_List,Drugs_List 
 where Drug_Details.Company_ID=Company_List.Company_ID And 
 ( 
 Drug_Details.Drug_ID ='arnica' OR 
 Brand_Name Like '%arnica%' OR
 Drugs_List.Generic_Name Like '%arnica%'
 and(Drugs_List.Drug_ID=Drug_Details.Drug_ID)
 );

输出:enter image description here

  

转换为内部联接(不工作)

 SELECT distinct(Company_List.Company_Name),
Drug_Details.* 
from Drug_Details , Company_List
INNER JOIN Drugs_List
ON Drug_ID=Drugs_List.Drug_ID
where Drug_Details.Company_ID=Company_List.Company_ID And
(Drug_Details.Drug_ID ='arnica' OR 
 Brand_Name Like '%arnica%')

输出:enter image description here

 select * from Drugs_List where Generic_Name like'%arnica%'

输出:Result of First Query

select * from Drug_Details where Brand_Name like'%arnica%'

输出:Result of second Query

 select * from Drug_Details where Drug_ID='a0927'

输出:Result Of 3rd Query

1 个答案:

答案 0 :(得分:2)

我认为你想要这种情况

  1. 从给定标准(Brand_Name , Drug_Id, Generic Name
  2. 中检索Drug_ID
  3. 选择基于Retrieved Drug_ID
  4. 的记录
     SELECT distinct(Company_List.Company_Name),
     Drug_Details.* 
     from Drug_Details , Company_List 
     where Company_List.Company_ID=Drug_Details.Company_ID and Drug_Details.Drug_ID in 
    (
       select distinct(Drug_Details.Drug_ID) from Drug_Details where Drug_Details.Brand_Name like '%arnica%' or Drug_Details.Drug_ID in 
            (
              select Distinct(Drugs_List.Drug_ID) from Drugs_List where Generic_Name like '%arnica%' or Drugs_List.Drug_ID='arnica'
            ) 
     )
    
      

    最内部查询

    select Distinct(Drugs_List.Drug_ID) from Drugs_List where Generic_Name like '%arnica%' or Drugs_List.Drug_ID='arnica'
    

    Drug_Id's表中检索所有Drug_List如果给定标准与Generic_NameDrug_ID匹配

    结果:A0925,A0926,A0927,A0928,A0929,B0271

      

    中间内部查询

    select distinct(Drug_Details.Drug_ID) from Drug_Details where Drug_Details.Brand_Name like '%arnica%' or Drug_Details.Drug_ID in 
        (
          select Distinct(Drugs_List.Drug_ID) from Drugs_List where Generic_Name like '%arnica%' or Drugs_List.Drug_ID='arnica'
        ) 
    
    //Query as given below
    
    select distinct(Drug_Details.Drug_ID) from Drug_Details where Drug_Details.Brand_Name like '%arnica%' or Drug_Details.Drug_ID in 
            (
               'A0925','A0926','A0927','A0928','A0929','B0271'
            )
    

    结果:A0927

    如果给定标准与Generic_NameDrug_IDBrand Name匹配,则检索选定的Drug_Id

      

    最外面的查询

    SELECT distinct(Company_List.Company_Name),
         Drug_Details.* 
         from Drug_Details , Company_List 
         where Company_List.Company_ID=Drug_Details.Company_ID and Drug_Details.Drug_ID in 
        (
           select distinct(Drug_Details.Drug_ID) from Drug_Details where Drug_Details.Brand_Name like '%arnica%' or Drug_Details.Drug_ID in 
                (
                  select Distinct(Drugs_List.Drug_ID) from Drugs_List where Generic_Name like '%arnica%' or Drugs_List.Drug_ID='arnica'
                ) 
         )
    
    //Query as given
    
     SELECT distinct(Company_List.Company_Name),
     Drug_Details.* 
     from Drug_Details , Company_List 
     where Company_List.Company_ID=Drug_Details.Company_ID and Drug_Details.Drug_ID in 
    ( 
     'A0927'
     )
    

    结果:根据

    检索记录

    Company ID :1 , Drug_ID : A0927 Company ID :9 , Drug_ID : A0927