我有三张表,结构如下。

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%'

但是,仅通过指定派生列的别名,您将无法对派生列WHEREfun使用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/

10-13 00:51