根据记录

时间:2017-08-20 09:17:49

标签: sql ms-access

我有三个具有以下结构的表:

Table1:    Cat  
Fields:    Cat0 Cat1
Record 1:   A   
Record 2:   B   
Record 3:   C   
Record 4:   D   

Table2:    CatB
Fields:    Option
Record 1:   X
Record 2:   Y

Table3:    CatD
Fields:    Option
Record 1:   1
Record 2:   2

如果Cat0的记录中有B,则Cat1应查找CatB 如果Cat0的记录中有D

,Cat1应该查找CatD

预期的输出是:

Table1:    Cat  
Fields:    Cat0 Cat1
Record 1:   A   NULL
Record 2:   B   X or Y (Combo box)
Record 3:   C   NULL
Record 4:   D   1 or 2 (Combo box)

我在MS Access中使用查找值。

以下代码在查找Cat1时不起作用:

SELECT * 
FROM Cat a 
INNER JOIN CatB b on b.Option = a.Cat0 
WHERE a.Cat0 = "B" 
UNION SELECT * 
FROM Cat a 
INNER JOIN CatD d on d.Option = a.Cat0 
WHERE a.Cat0 = "D";

如何实现这一目标?

感谢。

1 个答案:

答案 0 :(得分:0)

我从不在表格中设置查询,只在表格上设置。

在名为Options:

的查询中更正UNION语句
SELECT "B" As Cat, Option FROM CatB
UNION SELECT "D", Option FROM CatD;

为什么不为CatB和CatD选项提供单一表格,而不必诉诸UNION。

Table:     Options
Fields:    Cat, Option
Record 1:   B,   X
Record 2:   B,   Y
Record 3:   D,   1
Record 4:   D,   2

在任何一种情况下,组合框都可以在RowSource中使用条件SQL语句 SELECT Option FROM Options WHERE Cat=[Cat0];

如果你想坚持使用UNION并为RowSource使用一体化语句:

SELECT Option FROM (SELECT "B" As Cat, Option FROM CatB
UNION SELECT "D", Option FROM CatD) AS Options WHERE Cat=[Cat0];

Cat1 GotFocus事件中的代码:Me.Cat1.Requery