我有一个基本的问题,即使用嵌套选择和表名,嵌套选择是第一个表中列的数据。以下是我想要做的以及我尝试过哪些查询但不起作用的示例。
在这个例子中,我想要一个查询,它会告诉我哪些宠物有天没有喂食
table pets
name type feed_schedule
-----------------------
joe dog sched_1
sam cat sched_2
...
table sched_1
day feed
---------
sun yes
mon no
tues yes
wed yes
thur no
fri yes
sat yes
table sched_2
day feed
---------
sun yes
mon yes
tues yes
wed no
thur no
fri yes
sat yes
SELECT * from pets WHERE (SELECT * FROM pets.feed_schedule WHERE
(feed = 'yes')
)
此查询抱怨我无权访问“feed_schedule”表 我怎么能做到这一点?谢谢!
答案 0 :(得分:0)
您当前的架构要求使用动态生成的表名。
可以使用客户端代码或存储过程使其工作,但它总是需要两个步骤:首先,查询pets
表以获取具有调度的表的名称,第二步是查询所选的调度表。换句话说,相当混乱。
相反,我建议您更改架构以使用单个表计划来保存所有计划,如下所示:
CREATE TABLE schedules (
schedule_id INT NOT NULL,
feed_day VARCHAR(4),
feed VARCHAR(3)
)
您要将所有现有的时间表保存到此表中。 此外,每只宠物都应该保存整数schedule_id。
现在,您可以使用简单联接来获取结果,如下所示:
SELECT p.name
FROM pets p, schedules s
WHERE p.schedule_id = s.schedule_id
AND s.feed = 'yes'