gpt4 book ai didi

MySQL where-in 子查询只返回一行

转载 作者:行者123 更新时间:2023-11-30 23:28:36 24 4
gpt4 key购买 nike

我有两个表类(class)和学生

比如说,Students 有字段:idfirst_name有数据

id : first_name

1 : Andrew
2 : Brian
3 : Charles
4 : David
5 : Eric
6 : Fred
7 : George

比如,Courses 有两个字段:id 和 students

有数据:

编号。 . . . . . . . 1. . . . . . 2

学生们。 . . 1,2,5。 . . .3,4,6,7

假设我想在类(class) 1 中查找学生的姓名

SELECT students FROM courses c WHERE c.id = 1;

按预期产生 1,2,5

还有

SELECT @students := students FROM courses c WHERE c.id =1;

按预期产生 1,2,5

SELECT s.first_name FROM students WHERE s.id IN (1,2,5);

如预期的那样产生 Andrew, Brian Eric

SET @students := students FROM courses c WHERE c.id =1;选择@students;`

产量 1、2、5

我希望

SET @students := students FROM courses c WHERE c.id =1;SELECT s.first_name FROM students WHERE s.id IN (@students);

让安德鲁、布赖恩·埃里克产生

但它只返回名字:Andrew

我完全知道我可以/应该有一个单独的 course_student 查找表,但我很想知道为什么我没有得到我期望的结果

我哪里错了?

最佳答案

您的问题在于您如何使用@students;在“IN”子句中使用时,它默认为字符串*。

所以你的查询实际上是这样的:

SELECT s.first_name FROM students s WHERE s.id IN ("1, 2, 5");

不幸的是,这最终是这样的:

SELECT s.first_name FROM students s WHERE s.id IN (1);

或者:

SELECT s.first_name 
FROM students s
WHERE s.id IN (
SELECT students FROM courses c WHERE c.id =1
)

(经典的相关子查询)

或者:

SELECT s.first_name FROM students s WHERE FIND_IN_SET(`id`, @students)

或者,最好使用@JohnTotetWoo 描述的 INNER JOIN。

*它似乎默认为一个字符串,然后转换为 int 的结果会去除第一个逗号后的每个数字。然而,它也可能只是 IN 子句的一个怪癖,它忽略了变量中第一个数字之后的所有其他内容。

关于MySQL where-in 子查询只返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11841850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com