2010-07-05 42 views
0

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

此信息具有主要值(人物和动物)的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 
+4

这些是我见过的最糟糕的名字。 – SLaks 2010-07-05 13:07:13

+0

你能说清楚什么现在不起作用吗?即你想要解决什么问题? – 2010-07-05 13:08:25

+0

2个基表,其中1个表存储它们之间的关系,具有fex额外属性 基于从关系表中提取关键字,将fex额外属性值作为用户输入。 此信息具有主值(人,动物)不是 我想根据输入像 在屏幕上显示 名字ü给其中发现此人有这种动物的记录的名字的ID与他 多数民众赞成它, – user287745 2010-07-05 13:15:35

回答

1

您至少有三个错误。

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

其他需要考虑的要点:

  • 你确定你的意思是FULL OUTER JOIN和不INNER JOIN?
  • 为什么添加不同的?如果一个人拥有两个同名的动物,你是否真的想要只返回一行?
  • input1, ..., input4从何而来?
  • 我认为table0应该重命名为person,table5animal和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 
+0

什么是完全加入? – Pondidum 2010-07-05 13:12:29

+0

@Pondidum:http://www.w3schools.com/sql/sql_join_full.asp – 2010-07-05 13:20:53

+0

Byers请检查 – user287745 2010-07-05 13:22:01