2014-01-07 143 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