我有三张桌子,水果,人和蔬菜
人
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
它减少了输出的重复..这甚至可能吗?可以当我以前尝试过 价值观一直在重复?他们是一种避免它的方法吗?
答案 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;