如何在另一个表的嵌套选择中引用一个表中的列

时间:2012-11-12 05:11:43

标签: mysql select nested

我有一个基本的问题,即使用嵌套选择和表名,嵌套选择是第一个表中列的数据。以下是我想要做的以及我尝试过哪些查询但不起作用的示例。

在这个例子中,我想要一个查询,它会告诉我哪些宠物有天没有喂食

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”表 我怎么能做到这一点?谢谢!

1 个答案:

答案 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'