SQL查询语句
现在有三个表admin_user(字段ID,USERNAME,PASSWORD,ORG_ID,CLASS_ID,LEVEL,NAME) 其中的ORG_ID,class_id在某些情况下为0。
org_info(字段org_id,name)
class_info(字段id,name,org_id)
比如现在admin_user中有一条数据为
id username password level org_id class_id name
1 username password 3 0 0 张三
2 username1 password1 2 1 0 李四
3 username2 password2 1 1 1 王五
class_info中有一条数据为
id name org
1 班级1 1
org_info中数据为
org_id name
1 组织1
想得到的结果是查询A中的数据时,返回的结果为
id username level org_id class_id name
1 username 3 0 0 张三
2 username1 2 组织1 0 李四
3 username2 1 组织1 班级1 王五 个人建议,问SQL问题,说明数据库类型,附上创建表和初始化数据的SQL(不用手打的,数据库可以直接导出),回复率应该会高很多。
就像我,哪怕我心里有思路怎么写你的SQL了,我还是实在不想对着你的帖子辛辛苦苦的复制粘贴新建表,新建字段,添加数据,来写个sql。。。
SELECT
u.ID,
u.USERNAME,
U.LEVEL,
IFNULL(o.name, u.ORG_ID),
IFNULL(c.name, u.CLASS_ID),
u.NAME
FROM
admin_user u
LEFT JOIN org_info o
ON u.ORG_ID = o.ORG_ID
LEFT JOIN class_info c
ON u.CLASS_ID = C.CLASS_ID ; 楼上正解,而且。。你这个直接百度多表关联查询。。多看看那些语法,花点时间你就知道你这个怎么查询了。。实际上就只是where条件如何运用的问题 本帖最后由 pxhzai 于 2021-2-2 00:04 编辑
https://wwx.lanzoui.com/inJyEl766ch
SELECT a.id, a.username,a.level,case a.org_id WHEN 0 then 0 else b.name end as org_id, case a.class when 0 then 0 else c.name end as org_id,a.NAME
from admin_user a
left join org_info b on a.org_id = b.org_id
left jon class_info c on a.class_id = c.id selecta.id,a.username,a.level,
casea.ori_id when '1'then '组织1' else '0' end as ,
casea.class_idwhen '1'then '班级1' else '0' end as ,
a.namefromadmin_user a,class_info b,org_info c
where a.id=b.id and a.org_id = c.org_id
查了下, mysql 用ifnull或coalesce, ms sql server用isnull或coalesce, oracle用nvl,另外3楼的sql里,IFNULL(o.name, u.ORG_ID),name和orgid字段的类型不一样,最好改成一样,另外后面要加个 as org_id 学习一下。 pxhzai 发表于 2021-2-2 00:02
https://wwx.lanzoui.com/inJyEl766ch
谢谢分享
页:
[1]
2