Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在一行中查询同一列两次_Sql_Postgresql - Fatal编程技术网

Sql 在一行中查询同一列两次

Sql 在一行中查询同一列两次,sql,postgresql,Sql,Postgresql,我在同一行中选择学生姓名和教授姓名时遇到问题 表用户 ID --- NAME 表格研究 STUDENT_ID (FK) --- PROFESSOR_ID (FK) referencing USERS 正如我上面所说的,我想选择同一行中的两个名称。 有什么建议吗 此外,表中还有一个可选字段,名为AUX_PROFESSOR,如果设置了,我还需要选择他的名字。我该怎么做呢?您只需要在结果集中为列添加别名 SELECT s.Name AS StudentName, p.N

我在同一行中选择学生姓名和教授姓名时遇到问题

表用户

ID --- NAME
表格研究

STUDENT_ID (FK) --- PROFESSOR_ID (FK)
     referencing USERS
正如我上面所说的,我想选择同一行中的两个名称。 有什么建议吗


此外,表中还有一个可选字段,名为AUX_PROFESSOR,如果设置了,我还需要选择他的名字。我该怎么做呢?

您只需要在结果集中为列添加别名

SELECT  s.Name AS StudentName,
        p.Name AS ProfessorName
[...]

您需要多个联接。以下内容将在一行中显示两个名称:

select s.name as student_name, p.name as professor_name
from users s join
     researches r
     on s.id = r.student_id
     users p
     on p.id = r.professor_id;
如果你有一个或两个教授,你可以这样做:

select s.name as student_name,
       max(p.name) as professor1_name,
       (case when min(p.name) <> max(p.name) then min(p.name) end) as professor2_name
     researches r
     on s.id = r.student_id
     users p
     on p.id = r.professor_id
group by s.name;
选择s.name作为学生姓名,
max(p.name)作为教授1,
(当min(p.name)max(p.name)然后min(p.name)结束时的情况)作为教授2_姓名
研究者
在s.id=r.student\U id上
用户p
关于p.id=r.professor\u id
按s.名称分组;

您没有说明如何在数据中区分这两种类型的教授,因此这里只列出了这两个名称。

您使用的是哪种数据库,MySQL还是Postgres?
。。。学生ID引用用户(ID),…
我正在使用postgres。我在这方面是个新手,但我认为两者是相似的。。我不知道它们之间是否存在巨大的查询差异。@user3260711。你能显示样本数据和期望的结果吗?我没有得到任何结果,因为我不知道如何尝试,但我会添加我想要的结果。。谢谢你的时间:汉克斯,成功了。但是你怎么知道这些事情呢?呵呵,你是个和蔼可亲的人。我不明白第三行的意思(例如:。如果第二位教授的列值不同于NULL,我想列出他。。否则我不需要他的名字。@user3260711…有很多与人和数据打交道的经验。+1感谢Gordon在没有接受答案的情况下所做的努力。