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