有人能告诉我这里的语法是什么:
SELECT `t`.*, `u`.`first_name`, `u`.`second_name`
FROM `tickets` `t`
(CASE WHEN `t`.`user_id` IS NOT NULL
THEN
JOIN `adminbb` `u` ON `t`.`admin_id`=`u`.`admin_id`
ELSE
JOIN `users` `u` ON `t`.`user_id`=`u`.`user_id`
END)
WHERE `t`.`ticket_id` =1
ORDER BY `t`.`ticketText_id`
LIMIT 0,3
错误说:您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在'附近使用正确的语法't
。user_id
IS NOT NULL,然后加入adminbb
u
ON {{ 1}}。第3行的`admin_id'
感谢Alan。
答案 0 :(得分:1)
选择 [全部| DISTINCT | DISTINCTROW] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [,select_expr ...] [FROM table_references ...
并且没有像CASE
这样的复杂表达式定义表引用。
您可以使用:
SELECT IF(t.user_id IS NULL, a.user_id, u.user_id) AS user_id, ...
FROM ...
JOIN `adminbb` `a` ON `t`.`admin_id`=`u`.`admin_id`
JOIN `users` `u` ON `t`.`user_id`=`u`.`user_id`
答案 1 :(得分:1)
一旦你将你要求服务器做的事情概念化,这在MySQL中并不难实现。
我已经针对t.user_id推翻了IS NOT NULL
测试,因为原来的case语句似乎是倒退的,当t.user_id不为null时加入admin并且当t.user_id为null时加入用户,这似乎是不可能的。除此之外,这里是一个查询,通过在可能的情况下加入用户来获取first_name和second_name,否则加入admin。连接是LEFT
连接,因为我们需要从'ticket'返回行,而不管哪个表是可连接的。
SELECT t.*,
COALESCE(u.first_name,a.first_name) as first_name,
COALESCE(u.second_name,a.second_name) as second_name
FROM `tickets` `t`
LEFT JOIN `users` `u` ON `t`.`user_id`=`u`.`user_id`
LEFT JOIN `adminbb` `a` ON `t`.`admin_id`=`a`.`admin_id` AND t.user_id IS NULL
WHERE `t`.`ticket_id` =1
ORDER BY `t`.`ticketText_id`
LIMIT 0,3;
COALESCE()
函数从其参数中返回最左边的非空值。
LEFT JOIN用户将从“u”中获取值,如果它们存在并且t.user_id不为null,则LEFT JOIN adminbb将仅在t.user_id为null时查找“a”中的值
ON
子句中的条件只需要是可测试的表达式,它们实际上不必是“关于”您加入的表。在针对adminbb的连接的情况下,新的连接条件实际上是左边的表而不是右边的表,但这仍然是非常合法的,并且仍然会阻止在不需要时尝试连接。 / p>