我有三张表,结构如下。
user [user_id | firstname | lastname ]
user_messages [user_message_id | from_user_id | etc ]
user_messages_user_status [user_message_id | user_id | etc ]
我要做的是返回结果如下:
results [user_id | user_message_id | from_user_full_name | to_user_full_name]
这就是我目前所掌握的,但我在“CONCAT”附近不断发现一个错误:
SELECT *,
CONCAT_WS(' ', fu.firstname, fu.lastname) fun
CONCAT_WS(' ', tu.firstname, tu.lastname) tun
FROM user_messages um
LEFT JOIN user_messages_user_status umus
ON um.user_message_id = umus.user_message_id
INNER JOIN user fu
ON um.from_user_id = fu.user_id
INNER JOIN user tu
ON umus.user_id = tu.user_id
WHERE um.user_id = 'number' OR fun LIKE 'Name%' OR tun LIKE 'Name%'
谢谢你的帮助
最佳答案
您的选择列表中的fun
别名和下一列的CONCAT_WS
调用之间缺少逗号:
SELECT *,
CONCAT_WS(' ', fu.firstname, fu.lastname) fun,
-- ^^^
CONCAT_WS(' ', tu.firstname, tu.lastname) tun
FROM user_messages um
LEFT JOIN user_messages_user_status umus
ON um.user_message_id = umus.user_message_id
INNER JOIN user fu
ON um.from_user_id = fu.user_id
INNER JOIN user tu
ON umus.user_id = tu.user_id
WHERE um.user_id = 'number' OR fun LIKE 'Name%' OR tun LIKE 'Name%'
但是,仅通过指定派生列的别名,您将无法对派生列
WHERE
和fun
使用tun
查询。您可以再次指定CONCAT_WS
函数-WHERE CONCAT_WS(' ', fu.firstname, fu.lastname) LIKE 'Name%'
-或者使用另一种搜索方式-WHERE fu.firstname LIKE 'FName%' AND fu.lastname LIKE 'LName%'
。请注意,通过使用此处的函数,数据库引擎很可能无法利用索引。我相信您可以指定所需的列,而不是
*
。关于mysql - SQL Concat和Join 3表仅返回记录匹配条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20961734/