【发布时间】:2009-07-17 22:43:36
【问题描述】:
我有两个表,每个表都有三个布尔(ms-access“是/否”)列。
表 1:A1、B1、C1
表 2:A2、B2、C2
如果表 1 中的特定行满足以下条件,我想要表 2 中的行:
如果 A1 为真,则只有 A2 为真的行,如果 A1 为假,则只有 A2 为真或假的行。 如果 B1 为真,则只有 B2 为真的行,如果 B1 为假,则 B2 为真或假的行。 如果 C1 为真,则只有 C2 为真的行,如果 C1 为假,则只有 C2 为真或假的行。
示例一
A, B, C
Table 1: 0, 1, 0 (selected row)
Table 2: 1, 0, 0
0, 1, 0 (in return set)
1, 1, 0 (in return set)
0, 0, 1
1, 0, 1
0, 1, 1 (in return set)
1, 1, 1 (in return set)
示例二
A, B, C
Table 1: 0, 0, 1 (selected row)
Table 2: 1, 0, 0
0, 1, 0
1, 1, 0
0, 0, 1 (in return set)
1, 0, 1 (in return set)
0, 1, 1 (in return set)
1, 1, 1 (in return set)
我怎样才能最好地做到这一点?
例如,这不起作用:
SELECT vw_fbScheduleFull.LocationName
, vw_fbScheduleFull.FieldName
, vw_fbScheduleFull.Description
, vw_fbScheduleFull.StartTime
, vw_fbScheduleFull.EndTime
, vw_fbScheduleFull.LowerDivision
, vw_fbScheduleFull.UpperDivision
, vw_fbScheduleFull.SeniorDivision
FROM (vw_fbSchedule
Full INNER JOIN fbDivision
ON vw_fbScheduleFull.LowerDivision = fbDivision.LowerDivision
AND fbDivision.LowerDivision = 1
OR vw_fbScheduleFull.UpperDivision = fbDivision.UpperDivision
AND fbDivision.UpperDivision = 1
OR vw_fbScheduleFull.SeniorDivision = fbDivision.SeniorDivision
AND fbDivision.SeniorDivision = 1)
WHERE (vw_fbScheduleFull.PracticeDate = ?)
AND (vw_fbScheduleFull.Locked IS NULL)
AND (fbDivision.DivisionName = ?)
ORDER BY vw_fbScheduleFull.LocationName
, vw_fbScheduleFull.FieldName
, vw_fbScheduleFull.StartTime
【问题讨论】:
-
那应该是下一个相关网站。 domyhomework.com
-
不,这是真的。我没有作业。抱歉简化了示例。
-
@onedaywhen:您的评论令人困惑。您似乎的意思是布尔字段应该是 NULLable 并且 Yes/No 字段的 Jet/ACE 实现不是(这是真的)。但是您的第二句话似乎说 Yes/No is Nullable。
-
Access 数据库引擎的 YESNO 数据类型不是布尔值。 YESNO 不可能是因为,像所有 SQL 数据类型一样,它是 NULLable 即三值逻辑。因此,因为 YESNO 可以有三个值,所以它不是布尔值。另外,我听说 YESNO 数据类型在 NULLability (allenbrowne.com/NoYesNo.html) 方面有问题,所以我建议避免使用它,而不是 example_yesno INTEGER DEFAULT 0 NOT NULL, CHECK (example_yesno IN (0, 1) )