Mysql 如何解决在单个大小写表达式中选择多个列的问题
我想知道是否有任何方法可以根据if语句的结果选择两列 到目前为止,我已经把不必要的东西减半了:Mysql 如何解决在单个大小写表达式中选择多个列的问题,mysql,sql,Mysql,Sql,我想知道是否有任何方法可以根据if语句的结果选择两列 到目前为止,我已经把不必要的东西减半了: ( SELECT IF( (SELECT g.id FROM users AS u INNER JOIN user_groups AS g ON (g.id = u.group_id) WHERE u.id = 2) >= 4, (SE
( SELECT IF(
(SELECT g.id
FROM users AS u
INNER JOIN user_groups AS g ON (g.id = u.group_id)
WHERE u.id = 2) >= 4,
(SELECT p.action, p.id
FROM permissions AS p
WHERE p.required_points <=
(SELECT reputation
FROM users
WHERE id = 2)),
(SELECT 0, 0)))
基本上,是否存在行为类似于if语句的多列操作数?如果是这样,我将如何实施它们。任何资源链接都将不胜感激
错误是:
1241-操作数应包含1列
整个sql查询:
(SELECT p1.action,
p1.id
FROM user_permissions AS u1
INNER JOIN permissions AS p1 ON (p1.id = u1.action_id)
WHERE u1.user_id = 2)
UNION
(SELECT p2.action,
p2.id
FROM users AS u2
INNER JOIN user_groups AS g ON (g.id = u2.group_id)
INNER JOIN group_permissions AS gp ON (gp.group_id = g.id)
INNER JOIN permissions AS p2 ON (p2.id = gp.action_id)
WHERE u2.id = 2)
UNION
( SELECT IF(
(SELECT g2.id
FROM users AS u3
INNER JOIN user_groups AS g2 ON (g2.id = u3.group_id)
WHERE u3.id = 2) >= 4,
(SELECT p3.action, p3.id
FROM permissions AS p3
WHERE p3.required_points <=
(SELECT reputation
FROM users
WHERE id = 2)),
(SELECT 0, 0)))
哦,这基本上就是整个查询。这行不通:
SELECT IF( (SELECT g2.id
FROM users u3 INNER JOIN
user_groups AS g2
ON g2.id = u3.group_id
WHERE u3.id = 2) >= 4,
(SELECT p3.action, p3.id
FROM permissions AS p3
WHERE p3.required_points <= (SELECT reputation FROM users WHERE id = 2)),
(SELECT 0, 0)))
如果您确实不希望该行包含0,0,但它只是存在,因此存在其他值,那么让join或where将其过滤掉:
SELECT p3.action, p3.id
FROM (SELECT p3.action, p3.id
FROM permissions AS p3
WHERE p3.required_points <= (SELECT reputation FROM users WHERE id = 2))
) p3
WHERE (SELECT g2.id
FROM users u3 INNER JOIN
user_groups AS g2
ON g2.id = u3.group_id
WHERE u3.id = 2
) >= 4
你必须重复if语句。但是,如果你展示了你的全部查询或者简化的版本,可能有一种更简单的表达这个逻辑的方法。我确实考虑过,但是我不喜欢一个几乎完全复制的IF块的外观,所以假设必须有一个更好的方法。我现在就发布整个sql,希望能有所帮助。哦,谢谢,很抱歉回复太晚。我真的没有想过以这种方式使用子查询。
SELECT p3.action, p3.id
FROM (SELECT p3.action, p3.id
FROM permissions AS p3
WHERE p3.required_points <= (SELECT reputation FROM users WHERE id = 2))
) p3
WHERE (SELECT g2.id
FROM users u3 INNER JOIN
user_groups AS g2
ON g2.id = u3.group_id
WHERE u3.id = 2
) >= 4