2014-01-07 52 views
1

我有3个表,结构如下。SQL Concat和加入3表格返回记录匹配标准

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

感谢您的任何帮助

+0

您可以在询问之前至少花费1分钟的时间进行调试吗? – Vland

+1

@Vland缺少逗号有时很难找到,至少OP包含了一个完整的问题,他们尝试了什么,以及他们得到的错误。在这里恕我直言不能要求太多。 –

+0

将逗号粘在行首,你永远不会错过它们! – Strawberry

回答

1

您在选择列表中缺少逗号,fun别名a ND的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%' 

然而,你将无法在你的派生列funtun使用WHERE查询简单地通过指定别名。您可以再次指定CONCAT_WS函数 - WHERE CONCAT_WS(' ', fu.firstname, fu.lastname) LIKE 'Name%' - 或想出不同的搜索方式 - WHERE fu.firstname LIKE 'FName%' AND fu.lastname LIKE 'LName%'。请注意,通过使用此处的函数,数据库引擎很可能无法利用索引。

我相信你可以处理指定你需要的列而不是*

+0

啊,是的,这是一个愚蠢的错字。现在我可以得到它返回我想要的结果,但我仍然无法搜索“fun”或“tun”列。 – user3167249

+0

还是需要在where子句中再次使用concat? – user3167249