我有一张名为 faq
的表格。此表格包含字段faq_id
,faq_subject
。
我有另一个名为 article
的表格,其中包含article_id
,ticket_id
,a_body
,并将文章存储在特定的故障单中。当然,还有一个表格“门票”,其中包含字段ticket_id
,ticket_number
。
我想以格式检索结果表:
ticket_number
,faq_id
,faq_subject
。
为了做到这一点,我需要使用%LIKE%语句在faq_id
。article
字段中搜索a_body
。
我的问题是,如何动态执行此操作,以便返回SQL一个结果表,格式为ticket_number
,faq_id
,faq_subject
。
我尝试了UNION ALL
,LEFT JOIN
,LEFT OUTER JOIN
语句的多种配置,但它们都返回太多行,或者有不同的问题。
这甚至可以用于MySQL,是否可以编写一个包含@variables的SQL语句并且可以处理这个问题?
答案 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