Mysql 如何从userID不同的表中选择userID和user
我有一个表,其中所有的userID都不同,因为我需要一个主键,但是98个不同的userID链接到一个用户名。我需要从名为Mysql 如何从userID不同的表中选择userID和user,mysql,sql,userid,Mysql,Sql,Userid,我有一个表,其中所有的userID都不同,因为我需要一个主键,但是98个不同的userID链接到一个用户名。我需要从名为studenttable的数据库中选择一个用户,但仍要调用userID 这是该表的一个较短示例: **UserID Username Year Form Subject1 Subject2 Subject3 Subject4** 1 John 13 D Art French
studenttable
的数据库中选择一个用户,但仍要调用userID
这是该表的一个较短示例:
**UserID Username Year Form Subject1 Subject2 Subject3 Subject4**
1 John 13 D Art French Psychology Religion
2 John 13 D Art French Psychology Religion
.
.
99 Fank 13 D Maths Art Geography Biology
100 Fank 13 D Maths Art Geography Biology
.
.
198 Max 12 A Psychology Maths Physics German
199 Max 12 A Psychology Maths Physics German
.
.
296 Henry 13 D Psychology Economics French P.E
297 Henry 13 D Psychology Economics French P.E
等等
我想从数据库中选择符合特定标准的所有用户,例如,他们必须在第13年和表格D中,并将心理学作为他们的主题之一。然后,我只想显示一个具有相同用户名的用户
我希望结果表如下所示:
UserID Username Year Form Subject
1 John 13 D Psychology
296 Henry 13 D Psychology
任何帮助都将不胜感激,
感谢下面的聚合器
MIN
是任意的,它将为相同的记录选择最小的值。如果需要,请使用任何其他聚合器,例如MAX
:
SELECT MIN(UserId), Username, Year, Form, Subject1, Subject2, Subject3, Subject4
FROM studenttable
GROUP BY Username, Year, Form, Subject1, Subject2, Subject3, Subject4
下面的聚合器
MIN
是任意的,它将为相同的记录选择最小的值。如果需要,请使用任何其他聚合器,例如MAX
:
SELECT MIN(UserId), Username, Year, Form, Subject1, Subject2, Subject3, Subject4
FROM studenttable
GROUP BY Username, Year, Form, Subject1, Subject2, Subject3, Subject4
下面的聚合器
MIN
是任意的,它将为相同的记录选择最小的值。如果需要,请使用任何其他聚合器,例如MAX
:
SELECT MIN(UserId), Username, Year, Form, Subject1, Subject2, Subject3, Subject4
FROM studenttable
GROUP BY Username, Year, Form, Subject1, Subject2, Subject3, Subject4
下面的聚合器
MIN
是任意的,它将为相同的记录选择最小的值。如果需要,请使用任何其他聚合器,例如MAX
:
SELECT MIN(UserId), Username, Year, Form, Subject1, Subject2, Subject3, Subject4
FROM studenttable
GROUP BY Username, Year, Form, Subject1, Subject2, Subject3, Subject4
我想从数据库中选择符合特定条件的所有用户
标准,例如,他们必须在第13年,在表D和do中
心理学是他们的一门学科。然后我只想显示其中一个
具有相同用户名的用户
因此,您希望从表中找到这些行:
SELECT DISTINCT(s.userId) FROM studenttable s
WHERE s.year = 13 AND s.form='D'
and (s.subject1='Psychology' OR s.subject2='Psychology'
OR s.subject3='Psychology' OR s.subject3='Psychology')
允许在SQL查询中用于从结果集中删除重复项
我想从数据库中选择符合特定条件的所有用户
标准,例如,他们必须在第13年,在表D和do中
心理学是他们的一门学科。然后我只想显示其中一个
具有相同用户名的用户
因此,您希望从表中找到这些行:
SELECT DISTINCT(s.userId) FROM studenttable s
WHERE s.year = 13 AND s.form='D'
and (s.subject1='Psychology' OR s.subject2='Psychology'
OR s.subject3='Psychology' OR s.subject3='Psychology')
允许在SQL查询中用于从结果集中删除重复项
我想从数据库中选择符合特定条件的所有用户
标准,例如,他们必须在第13年,在表D和do中
心理学是他们的一门学科。然后我只想显示其中一个
具有相同用户名的用户
因此,您希望从表中找到这些行:
SELECT DISTINCT(s.userId) FROM studenttable s
WHERE s.year = 13 AND s.form='D'
and (s.subject1='Psychology' OR s.subject2='Psychology'
OR s.subject3='Psychology' OR s.subject3='Psychology')
允许在SQL查询中用于从结果集中删除重复项
我想从数据库中选择符合特定条件的所有用户
标准,例如,他们必须在第13年,在表D和do中
心理学是他们的一门学科。然后我只想显示其中一个
具有相同用户名的用户
因此,您希望从表中找到这些行:
SELECT DISTINCT(s.userId) FROM studenttable s
WHERE s.year = 13 AND s.form='D'
and (s.subject1='Psychology' OR s.subject2='Psychology'
OR s.subject3='Psychology' OR s.subject3='Psychology')
允许在SQL查询中用于从结果集中删除重复项。表中的问题是,主题可以位于四列
Subject1 Subject2 Subject3 Subject4
中的任何列中,为此,您可以像这样使用in
谓词:
WHERE 'Psyhcology' IN(Subject1, Subject2, Subject3, Subject4)
因此,您的完整查询将是:
SELECT
UserId,
UserName,
Year,
Form,
'Psyhcology' AS Subject
FROM tablename
WHERE Year = 13
AND Form = 'D'
AND userID IN(SELECT UserID
FROM tablname
WHERE 'Psychology' IN(Subject1, Subject2, Subject3, Subject4));
注意:此查询将为名称提供重复的行
,因为您有多个具有不同id的名称:
╔═════════╦═══════════╦═══════╦═══════╦════════════╗
║ USERID ║ USERNAME ║ YEAR ║ FORM ║ SUBJECT ║
╠═════════╬═══════════╬═══════╬═══════╬════════════╣
║ 1 ║ John ║ 13 ║ D ║ Psyhcology ║
║ 2 ║ John ║ 13 ║ D ║ Psyhcology ║
║ 296 ║ Henry ║ 13 ║ D ║ Psyhcology ║
║ 297 ║ Henry ║ 13 ║ D ║ Psyhcology ║
╚═════════╩═══════════╩═══════╩═══════╩════════════╝
但是,如果要获得唯一的行,则必须为每组名称选择一个id,例如MIN(USerID)
:
╔═════════╦═══════════╦═══════╦═══════╦════════════╗
║ USERID ║ USERNAME ║ YEAR ║ FORM ║ SUBJECT ║
╠═════════╬═══════════╬═══════╬═══════╬════════════╣
║ 296 ║ Henry ║ 13 ║ D ║ Psyhcology ║
║ 1 ║ John ║ 13 ║ D ║ Psyhcology ║
╚═════════╩═══════════╩═══════╩═══════╩════════════╝
但是,我更希望通过为
主题创建一个新的表来替换该表:
主题
:
subject
PK
SubjectName
然后,您的桌子看起来像:
UserID Username Year Form Subject
1 John 13 D Psychology
296 Henry 13 D Psychology
UserId
用户名
年份
表格
SubjectId
外键引用subjects表
这将使查询这两个表变得更容易。例如,如果要搜索选择特定主题的用户,只需将两个表合并即可:
SELECT
MIN(u.UserId) AS UserId,
u.Username,
u.Year,
u.Form,
s.Subjectname
FROM users AS u
INNER JOIN subjects AS s ON u.subjectId = s.subjectId
WHERE s.subjectname = 'Psyhcology'
AND u.Year = 13
AND u.Form = 'D'
GROUP BY u.Username, u.Year, u.Form, s.Subjectname;
这将为您提供与以前相同的结果:
╔═════════╦═══════════╦═══════╦═══════╦═════════════╗
║ USERID ║ USERNAME ║ YEAR ║ FORM ║ SUBJECTNAME ║
╠═════════╬═══════════╬═══════╬═══════╬═════════════╣
║ 296 ║ Henry ║ 13 ║ D ║ Psyhcology ║
║ 1 ║ John ║ 13 ║ D ║ Psyhcology ║
╚═════════╩═══════════╩═══════╩═══════╩═════════════╝
下面是一个演示,演示了修改后的表结构:
表中的问题是,主语可以位于四列Subject1 Subject2 Subject3 Subject4
中的任何一列,为此,您可以使用中的谓词,如下所示:
WHERE 'Psyhcology' IN(Subject1, Subject2, Subject3, Subject4)
因此,您的完整查询将是:
SELECT
UserId,
UserName,
Year,
Form,
'Psyhcology' AS Subject
FROM tablename
WHERE Year = 13
AND Form = 'D'
AND userID IN(SELECT UserID
FROM tablname
WHERE 'Psychology' IN(Subject1, Subject2, Subject3, Subject4));
注意:此查询将为名称提供重复的行
,因为您有多个具有不同id的名称:
╔═════════╦═══════════╦═══════╦═══════╦════════════╗
║ USERID ║ USERNAME ║ YEAR ║ FORM ║ SUBJECT ║
╠═════════╬═══════════╬═══════╬═══════╬════════════╣
║ 1 ║ John ║ 13 ║ D ║ Psyhcology ║
║ 2 ║ John ║ 13 ║ D ║ Psyhcology ║
║ 296 ║ Henry ║ 13 ║ D ║ Psyhcology ║
║ 297 ║ Henry ║ 13 ║ D ║ Psyhcology ║
╚═════════╩═══════════╩═══════╩═══════╩════════════╝
但是,如果要获得唯一的行,则必须为每组名称选择一个id,例如MIN(USerID)
:
这将为您提供:
╔═════════╦═══════════╦═══════╦═══════╦════════════╗
║ USERID ║ USERNAME ║ YEAR ║ FORM ║ SUBJECT ║
╠═════════╬═══════════╬═══════╬═══════╬════════════╣
║ 296 ║ Henry ║ 13 ║ D ║ Psyhcology ║
║ 1 ║ John ║ 13 ║ D ║ Psyhcology ║
╚═════════╩═══════════╩═══════╩═══════╩════════════╝
但是,我更希望通过为主题创建一个新的表来替换该表:
主题
:
subject
PK
SubjectName
然后,您的桌子看起来像:
UserID Username Year Form Subject
1 John 13 D Psychology
296 Henry 13 D Psychology
UserId
用户名
年份
表格
SubjectId
外键引用subjects表
这将使查询这两个表变得更容易。例如,如果要搜索选择特定主题的用户,只需将两个表合并即可:
SELECT
MIN(u.UserId) AS UserId,
u.Username,
u.Year,
u.Form,
s.Subjectname
FROM users AS u
INNER JOIN subjects AS s ON u.subjectId = s.subjectId
WHERE s.subjectname = 'Psyhcology'
AND u.Year = 13
AND u.Form = 'D'
GROUP BY u.Username, u.Year, u.Form, s.Subjectname;
这将为您提供与以前相同的结果:
╔═════════╦═══════════╦═══════╦═══════╦═════════════╗
║ USERID ║ USERNAME ║ YEAR ║ FORM ║ SUBJECTNAME ║
╠═════════╬═══════════╬═══════╬═══════╬═════════════╣
║ 296 ║ Henry ║ 13 ║ D ║ Psyhcology ║
║ 1 ║ John ║ 13 ║ D ║ Psyhcology ║
╚═════════╩═══════════╩═══════╩═══════╩═════════════╝
下面是一个演示,演示了修改后的表结构:
您表格中的问题是主题可以位于四列主题1主题2主题3主题4
中的任何一列,因此您可以使用