MySQL在join with where子句中动态选择字段


MySQL dynamically selecting fields within join with where clause?

所以只有当另一个字段的值不等于0时,我才能选择一个字段。

那么,事情是这样的

我有三个表,它们是- users, schools, campuses

基本上,我需要从这3个表中选择单个用户数据。我想只从校园中选择campus_name字段,如果用户。Campus_id字段不为0

所以,像这样的伪代码可能会给你一个更好的想法…

查询在$id变量中传递,该变量具有某些用户的id。

SELECT users.*, schools.*, (if(users.campus_id != 0) then campuses.campus_name) 
FROM users, schools, campuses 
WHERE users.id = '$id' (if(users.campus_id != 0) then AND campuses.id = users.campus_id)
SELECT *
FROM schools, 
    users LEFT OUTER JOIN campuses 
        ON users.campus_id != 0 
        AND users.campus_id = campuses.id
WHERE users.school_id = schools.id

如果您要连接三个表,您总是希望用户有一个学校,但他们可能没有校园,如果是这种情况,显然不应该显示任何内容。

你能做的最好的事情就是在校园里使用LEFT JOIN

下面是基于你的伪代码的一个例子:

SELECT u.*, s.*, c.campus_name
FROM users u
INNER JOIN schools s ON u.school_id = s.school_id
LEFT JOIN campuses c ON u.campus_id = c.campus_id
WHERE u.user_id = $userId

如果我没理解错的话,您是希望显示所有信息,而只显示存在的校园名称?如果是这样,我相信下面的语句应该能达到目的:

SELECT `u`.* `s`.* if(`c`.`campus_name` != 0, `c`.`campus_name`, "") as `campus`
FROM `users` as `u`
INNER JOIN `schools` as `s` ON `u`.`school_id` = `s`.`school_id`
LEFT JOIN `campuses` as `c` ON `u`.`campus_id` = `c`.`campus_id`
WHERE `u`.`user_id` = $user_id;

未经测试,从我的头写,可能有错误在那里