簡體   English   中英

子查詢返回的通配符超過1行LIKE&CONCAT

[英]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”字段中輸入以下值:

  • 服務交付經理
  • IT服務交付經理
  • 高級服務交付經理

因此,當我運行以下查詢時,出現“子查詢返回多於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM