SQL选择查询不工作

SQL选择查询不工作,sql,Sql,结果:1054-字段列表中的未知列“s1.id” 是什么导致s1未被声明?由于某些原因,s1.id未检测到s1实例。我一直试图通过更改不同的括号来找出答案,但我真的不知道如何调试它。我尝试过更改右括号的位置,但这会搞乱查询 s1是在括号内定义的,因此在引用它的括号外不可见。因为s1仅在内部选择中定义,所以不是范围。选择diff.id或s3.id,它们将与您加入的值相同。表s1不在您试图选择它的查询的from部分,它只在子查询中。这里所有其他人说的都是对的,但只是为了给您一个更精确的解决方案,看看

结果:1054-字段列表中的未知列“s1.id”


是什么导致s1未被声明?由于某些原因,s1.id未检测到s1实例。我一直试图通过更改不同的括号来找出答案,但我真的不知道如何调试它。我尝试过更改右括号的位置,但这会搞乱查询

s1是在括号内定义的,因此在引用它的括号外不可见。

因为s1仅在内部选择中定义,所以不是范围。选择diff.id或s3.id,它们将与您加入的值相同。

表s1不在您试图选择它的查询的from部分,它只在子查询中。

这里所有其他人说的都是对的,但只是为了给您一个更精确的解决方案,看看下面的查询,它不应该是s1.id,而应该是diff.id

--
-- Table structure for table `employees`
--
CREATE TABLE IF NOT EXISTS `employees` (
  `id_user` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `email` varchar(64) NOT NULL,
  `phone_number` varchar(16) NOT NULL,
  `username` varchar(16) NOT NULL,
  `password` varchar(32) NOT NULL,
  `confirmcode` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id_user`),
  KEY (name)
);
--
-- Table structure for table `Foods`
--
CREATE TABLE IF NOT EXISTS `Foods` (
  `Food_name` varchar(40) NOT NULL,
  `CostPerRefill` double NOT NULL,
  PRIMARY KEY (`Food_name`)
);


--
-- Table structure for table `Serving_Info`
--
CREATE TABLE IF NOT EXISTS `Serving_Info` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `Food_Value` varchar(40) NOT NULL,
  `Food_name` varchar(40) NOT NULL,
  `Served_On` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `Oncall` varchar(128),
  Foreign key(`Oncall`) REFERENCES `employees`(`name`),
  Foreign key(`Food_name`) REFERENCES `Foods`(`Food_name`),
  PRIMARY KEY (`id`),
  UNIQUE (`Oncall`,`Food_name`, `Served_On`)
);

请尝试在第一部分中选择id、食物名称,因为s1和s3超出范围-它们位于另一个SELECT语句中您还需要将s1.id添加到派生表的SELECT列表中。您已将s1和s2封装到子查询中,并将其称为diff。如果要使用该查询中的列,则需要使用diff前缀.yah,他需要在他的子查询中确定这些内容。尽管第一个s1和s3都不起作用,但我的助教在一次帮助会话中帮助我形成了这个查询,我不知道如何修复它,因为即使在添加了diff.id而不是s1.id之后,我开始出现更多错误…我觉得整个查询都是无效的…我已经放弃了…谢谢你帮助我。
--
-- Table structure for table `employees`
--
CREATE TABLE IF NOT EXISTS `employees` (
  `id_user` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `email` varchar(64) NOT NULL,
  `phone_number` varchar(16) NOT NULL,
  `username` varchar(16) NOT NULL,
  `password` varchar(32) NOT NULL,
  `confirmcode` varchar(32) DEFAULT NULL,
  PRIMARY KEY (`id_user`),
  KEY (name)
);
--
-- Table structure for table `Foods`
--
CREATE TABLE IF NOT EXISTS `Foods` (
  `Food_name` varchar(40) NOT NULL,
  `CostPerRefill` double NOT NULL,
  PRIMARY KEY (`Food_name`)
);


--
-- Table structure for table `Serving_Info`
--
CREATE TABLE IF NOT EXISTS `Serving_Info` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `Food_Value` varchar(40) NOT NULL,
  `Food_name` varchar(40) NOT NULL,
  `Served_On` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `Oncall` varchar(128),
  Foreign key(`Oncall`) REFERENCES `employees`(`name`),
  Foreign key(`Food_name`) REFERENCES `Foods`(`Food_name`),
  PRIMARY KEY (`id`),
  UNIQUE (`Oncall`,`Food_name`, `Served_On`)
);
SELECT diff.id, 
       s3.food_name, 
       Count(*) AS TotalRefill 
FROM   (SELECT ( s1.food_value - s2.food_value ) AS difference, s1.id 
        FROM   `serving_info` s1, 
               `serving_info` s2
        WHERE  s1.id - s2.id = '1' 
               AND s1.food_name = 'Shrimp' 
               AND s2.food_name = 'Shrimp') AS diff, 
       `serving_info` s3 
WHERE  s3.id = diff.id 
       AND s3.food_value >= '990' 
       AND diff.difference >= '150'