我有一张表格,帐号,帐号类型和美国各州的50列。
我想在访问中运行查询,它返回NE或NY中的所有已注册帐户类型。在任何州[1-50]列中,每种帐户类型最多可以有50种不同的状态。
所以我有:
Select *
FROM MSDAP
WHERE account_type = 'Registered' AND State1 IN ('NE', 'NY') OR
State2 IN ('NE', 'NY') OR State3 IN ('NE', 'NY') OR
State4 IN ('NE', 'NY') OR State5 IN ('NE', 'NY') OR
State6 IN ('NE', 'NY') OR State6 IN ('NE', 'NY') OR
State7 IN ('NE', 'NY') OR State8 IN ('NE', 'NY') OR
State9 IN ('NE', 'NY') OR State9 IN ('NE', 'NY');
这显然不起作用。有没有办法做到这一点?
答案 0 :(得分:2)
多么糟糕的数据模型。每个州应该有一行,而不是将信息分布在各列中。
在任何情况下,您的问题都是错误的括号:
where account_type = 'Registered' AND
(State1 IN ('NE', 'NY') OR State2 IN ('NE', 'NY') OR
State3 IN ('NE', 'NY') OR State4 IN ('NE', 'NY') OR
State5 IN ('NE', 'NY') OR State6 IN ('NE', 'NY') OR
State6 IN ('NE', 'NY') OR State7 IN ('NE', 'NY') OR -- are you really checking `state6` again?
State8 IN ('NE', 'NY') OR State9 IN ('NE', 'NY') OR
State9 IN ('NE', 'NY') -- are you really checking `state9` again?
)