MySQL JOIN基于多个表之间的动态LIKE语句

时间:2011-09-27 14:46:10

标签: mysql sql join sql-like

我有一张名为 faq 的表格。此表格包含字段faq_idfaq_subject。 我有另一个名为 article 的表格,其中包含article_idticket_ida_body,并将文章存储在特定的故障单中。当然,还有一个表格“门票”,其中包含字段ticket_idticket_number

我想以格式检索结果表: ticket_numberfaq_idfaq_subject

为了做到这一点,我需要使用%LIKE%语句在faq_idarticle字段中搜索a_body

我的问题是,如何动态执行此操作,以便返回SQL一个结果表,格式为ticket_numberfaq_idfaq_subject

我尝试了UNION ALLLEFT JOINLEFT OUTER JOIN语句的多种配置,但它们都返回太多行,或者有不同的问题。

这甚至可以用于MySQL,是否可以编写一个包含@variables的SQL语句并且可以处理这个问题?

2 个答案:

答案 0 :(得分:3)

首先,这种设计存在问题。您将某些数据嵌入到另一列中,这将导致逻辑​​和性能问题(因为您无法将a_body编入索引以使其有助于JOIN)。如果这是一次性的事情,那么这是一个问题,但否则你将遇到这种设计的问题。

其次,请考虑以下示例:您正在搜索faq_id#123。你有一篇文章包含faq_id 4123。你最终会在那里结束虚假比赛。您可以使用某种标记(例如faq_id)在文本中嵌入[faq_id:123]值,但此时您也可以将它们保存在另一个表中。< / p>

以下查询应该有效(我认为MySQL支持CAST,如果没有,那么你可能需要调整它)。

SELECT
    T.ticket_number,
    F.faq_id,
    F.faq_subject
FROM
    Articles A
INNER JOIN FAQs F ON
    A.a_body LIKE CONCAT('%', F.faq_id, '%')
INNER JOIN Tickets T ON
    T.ticket_id = A.ticket_id

编辑:已更正使用CONCAT

答案 1 :(得分:0)

SELECT DISTINCT t.ticket_number, f.faq_id, f.faq_subject
FROM faq.f
INNER JOIN article a ON (a.a_body RLIKE CONCAT('faq_id: ',faq_id))
INNER JOIN ticket t ON (t.ticket_id = a.ticket_id)
WHERE somecriteria