[英]Sub Query Returns More Than 1 Row LIKE & CONCAT with Wildcards
我有2個表格,“聯系人”和“ job_titles”。 在“聯系人”表中,有一個名為“位置”的字段。 使用新的“ job_titles”表,如果“ position”字段的值類似於“ job_titles”表中的“ title”字段,我想更新“ contacts”表中名為“ job_title_id”的字段,我來了跨越障礙。
由於position字段是自由文本字段,因此我們可以具有以下值:
另外,我們可能在“ job_titles”表的“ title”字段中輸入以下值:
因此,當我運行以下查詢時,出現“子查詢返回多於1行”錯誤。
UPDATE contacts
SET job_title_id =
(SELECT id
FROM job_titles
WHERE job_titles.title LIKE CONCAT('%', contacts.position, '%')
);
有沒有一種方法可以運行上述通配符查詢,從而滿足我的需要? 謝謝。
在更通用的假設下,以下內容將與最短標題匹配:
UPDATE contacts c
SET job_title_id = (SELECT id
FROM job_titles jt
WHERE jt.title LIKE CONCAT('%', c.position, '%')
ORDER BY char_length(jt.title)
LIMIT 1
);
通配符查詢可能會返回多個記錄。 因此,一種解決方案可以是如果使用限制為1的嵌套查詢。
喜歡
UPDATE contacts SET job_title_id = (SELECT id FROM job_titles WHERE job_titles.title LIKE CONCAT('%', contacts.position, '%') limit 1);
但是這里可能會出現一個問題,它可能會返回用於高級服務交付的記錄以搜索服務交付,因此,如果您字段的數據以職務開頭,那么您可以編寫類似的查詢。
UPDATE contacts SET job_title_id = (SELECT id FROM job_titles WHERE job_titles.title LIKE CONCAT(contacts.position, '%') limit 1);
該查詢將有所幫助。
UPDATE A SET A.job_title_id = B.id FROM contacts AS A
INNER JOIN job_titles AS B ON B.id IS Not NUll
WHERE B.title LIKE CONCAT('%', A.position, '%')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.