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

Mysql 如何在另一个表的嵌套选择中引用一个表中的列,mysql,select,nested,Mysql,Select,Nested,我有一个关于使用嵌套select的基本问题,嵌套select的表名是第一个表中某列的数据。下面是一个示例,说明我想做什么,以及我尝试过但不起作用的查询 在这个例子中,我想要一个查询,告诉我哪些宠物有几天没有喂食 table pets name type feed_schedule ----------------------- joe dog sched_1 sam cat sched_2 ... table sched_1 day feed --------- sun yes

我有一个关于使用嵌套select的基本问题,嵌套select的表名是第一个表中某列的数据。下面是一个示例,说明我想做什么,以及我尝试过但不起作用的查询

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

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”
我怎样才能做到这一点?谢谢大家!

当前模式要求使用动态生成的表名。 可以使用客户机代码或存储过程使其工作,但它始终需要两个步骤:第一步,查询
pets
table以获取带有计划的表的名称,第二步是查询所选计划表。换句话说,相当混乱

相反,我建议将您的模式更改为使用单表计划来保存所有计划,如下所示:

CREATE TABLE schedules (
    schedule_id INT NOT NULL,
    feed_day VARCHAR(4),
    feed VARCHAR(3)
)
SELECT p.name
FROM pets p, schedules s
WHERE p.schedule_id = s.schedule_id
  AND s.feed = 'yes'
所有现有计划都将保存到此表中。 此外,每个宠物都应该保存整数计划id

现在,您可以使用simple join获得结果,如下所示:

CREATE TABLE schedules (
    schedule_id INT NOT NULL,
    feed_day VARCHAR(4),
    feed VARCHAR(3)
)
SELECT p.name
FROM pets p, schedules s
WHERE p.schedule_id = s.schedule_id
  AND s.feed = 'yes'

谢谢@mvp这两步流程正是我现在所做的。我想让这个过程更干净一点。我的例子低估了现实生活中的问题。我有一个已使用多年的现场网站。实际上,pet表是一个度假租赁预订表。每个属性都有一个表(提要时间表),每个属性的每个日期都有一行。每一行都有当天房屋的状态、占用情况、预订价格等,因此,随着更多房屋的增加,制作一张包含所有这些“时间表”的表格似乎是一张非常“宽”的不断扩展的表格。似乎它是不可扩展的。谢谢@mvp这两步流程正是我现在所做的。我想让这个过程更干净一点。我的例子低估了现实生活中的问题。我有一个已使用多年的现场网站。实际上,pet表是一个度假租赁预订表。每个属性都有一个表(提要时间表),每个属性的每个日期都有一行。每一行都有当天房屋的状态、占用情况、预订价格等,因此,随着更多房屋的增加,制作一张包含所有这些“时间表”的表格似乎是一张非常“宽”的不断扩展的表格。似乎它是不可伸缩的。我以前见过“动态生成的表名”这个短语,这只是一个概念,还是有资源可以做到这一点?我使用此查询的最终目标是在数据库中查找错误,在数据库中,家庭的日期显示为“已占用”或“已占用”或“已占用”,这与可伸缩性相反。如果您创建了一个具有适当索引的大表,那么无论该表有多大,访问它的速度都不应该太慢。若人为地将该表拆分为多个部分,则仍然需要执行额外的查找,并且该查找的价格仍然略高于在大型表中查找一次的价格