这是一个解释我需要什么的例子:
我有 3 张 table :
contact: { id, invoices, name } // a contact can have several invoices
invoice: { id, contact, lines, comment } // an invoice can have several lines but only one contact
line: { id, invoice, designation } // a line can have only one invoice
如果用户搜索发票,则希望查询注释、名称和名称字段并仅获取匹配的发票。
所以我这样做了:
SELECT
invoice.id AS id,
invoice.contact AS contact,
invoice.comment AS comment,
FROM invoice
LEFT JOIN contact ON invoice.contact = contact.id
LEFT JOIN line ON line.invoice = invoice.id
WHERE (
contact.name LIKE '%SEARCH_TERM%' OR
invoice.comment LIKE '%SEARCH_TERM%' OR
line.designation LIKE '%SEARCH_TERM%'
)
此工作正常,但如果发票有多行与搜索词匹配,我将获得多次相同的发票。
所以我的问题是:即使在多个相关记录中找到搜索词,是否有办法只获取一次发票?
此外,有没有办法只获取发票的字段而不使用 ALIAS(除了搜索之外,我不关心表联系人和行)?
如果您知道更好的方法,我很想听听。
最佳答案
SELECT
DISTINCT invoice.*
FROM invoice
LEFT JOIN contact ON invoice.contact = contact.id
LEFT JOIN line ON line.invoice = invoice.id
WHERE (
contact.name LIKE '%SEARCH_TERM%' OR
invoice.comment LIKE '%SEARCH_TERM%' OR
line.designation LIKE '%SEARCH_TERM%'
)
关于mysql - 查询多张表,但只得到一张表的结果,不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871828/