1

我有一个关于使用嵌套选择的基本问题,其中嵌套选择的表名是第一个表中列的数据。这是我想要做什么以及我尝试过但不起作用的查询的示例。

在这个例子中,我想要一个查询来告诉我哪些宠物有几天不喂食

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”我该如何完成?谢谢!

4

1 回答 1

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'
于 2012-11-12T07:33:33.397 回答