如何制作这样的SQL查询?

时间:2010-07-05 13:04:20

标签: c# sql-server-2005

给定2个基表,1个表存储它们之间的关系以及一些额外的属性;根据从关系表中提取关系,将一些额外的属性值作为用户输入。

此信息包含主要值(人和动物)的ID,而不是名称。我想在屏幕上显示这些名字,比如根据您给出的记录输入,发现这个人是否有这种动物。

    select DISTINCT table0.person_name, table5.animal_name 
      from table1

 INNER JOIN table0, table5 
        on table1.person_id=table0.person_id
            and
        table1.animal_id=table5.animal_id

where table1.aa=input1 
       and table1.bb=input2 
       and table1.cc=input3 
       and table1.dd=input4

1 个答案:

答案 0 :(得分:1)

您至少有三个错误。

  • WHERE子句应该在JOIN .. ON子句之后,而不是之前。
  • 您不能引用表5中的列,因为它不会出现在FROM列表中。
  • 你不应该写ON xxx AND ON yyy。只需写下ON xxx AND yyy

需要考虑的其他要点:

  • 你确定你的意思是FULL OUTER JOIN而不是INNER JOIN吗?
  • 为什么要添加不同的?如果一个人拥有两只同名的动物,你真的只想回一行吗?
  • input1, ..., input4来自何处?
  • 我认为table0应该重命名为persontable5改为animal,将table1改名为person_animal,以便更容易理解每​​个表

我最好猜测你的意思是:

SELECT table0.person_name, table5.animal_name 
FROM table1 
JOIN table0 ON table1.person_id = table0.person_id
JOIN table5 ON table1.animal_id = table5.animal_id
WHERE table1.aa = input1 
  AND table1.bb = input2 
  AND table1.cc = input3 
  AND table1.dd = input4