我正在使用vfp9。
我有两张桌子:
Countries with the field:
id
--
1
2
3
Students with the fields:
id nname nation1id nation2id nation3id
--------------------------------------------
1 A 2 1
2 B 1
3 C 2 3 1
I want a query with this output:
countryid nname dummy
--------------------------
1 B 1
1 A 2
1 C 3
2 A 1
2 C 1
3 C 2
换句话说,对于ID为1的国家,我想首先列出将其作为nation1id的人,然后将其作为nation3id列出的人,以及将其作为nation3id的人。然后我会为id为2的国家做同样的事情,依此类推。
我试过这个问题:
select countries.id from countries ;
(SELECT nname, 1 FROM students WHERE nation1id = countries.id ;
UNION ;
select nname, 2 FROM students WHERE nation2id = countries.id ;
UNION ;
select nname, 3 FROM students WHERE nation3id = countries.id ;
order by 2)
但是获取“命令包含无法识别的词组/关键字”错误消息。
此致
Jan Nordgreen
答案 0 :(得分:0)
错过了您的国家/地区表列,但失败的原因是您列出了两个表...您的国家/地区和您的(选择/联合),但它们之间没有逗号或JOIN条件。 至于你的国家表没有列出字段,我相信你正在寻找国家的名字,但在学生的表中有“nname”,不知道这是否正确。无论如何,你可以得到你的查询输出如下。
select ;
allStNat.Nation as CountryID,;
allStNat.nname,;
allStNat.NationSort ;
from ;
( SELECT nname, ;
nation1id as Nation, ;
1 as NationSort;
FROM students ;
WHERE nation1id > 0;
UNION ALL;
select nname, ;
nation2id as Nation,;
2 as NationSort;
FROM students ;
WHERE nation2id > 0;
UNION ALL;
select nname, ;
nation3id as Nation,;
3 as NationSort ;
FROM students ;
WHERE nation3id > 0 ) allStNat;
order by ;
1, 3, 2
如果您想要的国家/地区表中有其他内容,我只会稍微更改实际国家/地区的名称并调整order by子句,因为列表中还有一列。
select ;
allStNat.Nation as CountryID,;
c.Country,;
allStNat.nname,;
allStNat.NationSort ;
from ;
( same select/union query above ) allStNat;
JOIN Countries c ;
ON allStNat.Nation = c.id
order by ;
1, 4, 3