MS Access中具有对齐数据的并行SQL查询

时间:2011-02-07 06:36:03

标签: sql ms-access

我有三张桌子,水果,人和蔬菜

personID personName
-------- ----------
1        Ken

水果

personID fruitname
-------- -----
1        apple
1        orange

蔬菜

personID vegetableName
-------- -------------
1        carrot
1        tomato
1        potato

我希望输出像这样......

personName fruitName vegetableName
---------- --------- -------------
1          apple     carrot
1          orange    tomato
1                    potato

它减少了输出的重复..这甚至可能吗?可以当我以前尝试过 价值观一直在重复?他们是一种避免它的方法吗?

1 个答案:

答案 0 :(得分:2)

只有在水果和蔬菜表中添加“位置”列并将其用作附加连接列时,才能执行此操作。

记录未在SQL中排序。所以,如果你想要排序,你总是需要一个排序标准,因为SQL标准不强制执行任何类型的排序顺序。

如果需要按字母顺序排序,您可以通过类似的方式动态添加位置列(在MS ACCESS中不起作用,但类似的东西会起作用):

 SELECT f1.personid, f1.fruitname, count(*) as position
   FROM fruit f1 outer join fruit f2 on f1.fruitname = f2.fruitname 
                                    and f1.personid = f2.personid  
  WHERE f2.fruitname < f1.fruitname
  GROUP BY f1.personid, f1.fruitname

此查询的位置从0开始,名称为“之前”。

现在您可以执行以下操作:

select f.personid, f.fruitname, v.vegetablename 
  from (*fruitquery*) f outer join (*vegetaryquery*) v on f.personid = v.personid
                                                      and f.positionid = v.positionid;