Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.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
Mysql 左键联接表,然后使用列-SQL_Mysql_Sql_Database - Fatal编程技术网

Mysql 左键联接表,然后使用列-SQL

Mysql 左键联接表,然后使用列-SQL,mysql,sql,database,Mysql,Sql,Database,我有一个包含两个表的数据库,我正试图以一种特定的方式连接它们 表1:概况 栏目:朋友ID、性别、生日、家乡、登记 表2:教育 列:朋友ID、学校名称、学校类型 我想像这样离开加入: SELECT friend_ID, birthyear, checkins FROM Friend_Profile LEFT JOIN Education on Profile.friend_ID = Education.friend_ID 然后我想把生日改为

我有一个包含两个表的数据库,我正试图以一种特定的方式连接它们

表1:概况

栏目:朋友ID、性别、生日、家乡、登记

表2:教育

列:朋友ID、学校名称、学校类型

我想像这样离开加入:

    SELECT 
       friend_ID, birthyear, checkins 
   FROM Friend_Profile 
   LEFT JOIN 
       Education on Profile.friend_ID = Education.friend_ID
然后我想把生日改为年龄(2013年生日),并将学校类型编码为类别。3表示“研究生院”,2表示“学院”,1表示“高中”,0表示“其他或无数据”,每行保留最高数字。(教育表通常包含多行,表示同一朋友ID的不同学校类型


非常感谢您的帮助。

很抱歉延迟。我创建了表并在localhost上运行了该语句

教育表:

配置文件表:

运行以下SQL语句后的结果:

更新:

使用
YEAR(CURDATE())
获取当前年份(2014年),或者如果要使用去年,则将其替换为2013年。如果要添加的select语句中缺少任何字段,显然可以添加更多字段以获取

结果:

它显示14,因为我使用了
YEAR(CURDATE())
而不是2013年。您可以根据需要更改它

SELECT profile.friend_id, YEAR(CURDATE()) - birthyear as age, checkins, MAX( 
CASE WHEN school_type =  'High School'
THEN 1 
WHEN school_type =  'College'
THEN 2 
WHEN school_type =  'Graduate School'
THEN 3 
ELSE 0 
END ) AS school_type
FROM profile
LEFT JOIN education ON profile.friend_id = education.friend_ID
GROUP BY (
profile.friend_id
)

从当前年份中减去生日以获得年龄和用例,用适当的整数替换学校类型。您应该能够在SELECT语句中完成所有操作。我也不希望每个朋友id显示超过一行。例如,如果一个朋友id在两个单独的列中列出了大学和研究生院,我只希望研究生院显示,该friend_id应该只出现一次。此外,一些friend_id根本不出现在教育表中,应该得到一个0而不是null。您可以将任何null的返回值替换为零,您可以得到最大学校类型。好的,但我仍然不明白如何为给定的frien只添加最高学校类型d_id如果你只想要最高的学校类型,你可以使用max和group by来确保在你从case中得到结果后得到最大的数字。因此case可以让你得到你需要的数字,max和group by会查找共享好友id的所有行中最高的一行。另一个问题……是否可以过滤掉所有情况ns,其中生日为空,然后执行2013年生日
SELECT profile.friend_id, YEAR(CURDATE()) - birthyear as age, checkins, MAX( 
CASE WHEN school_type =  'High School'
THEN 1 
WHEN school_type =  'College'
THEN 2 
WHEN school_type =  'Graduate School'
THEN 3 
ELSE 0 
END ) AS school_type
FROM profile
LEFT JOIN education ON profile.friend_id = education.friend_ID
GROUP BY (
profile.friend_id
)