mysql - 查询多张表,但只得到一张表的结果,不重复

标签 mysql sql join

这是一个解释我需要什么的例子:

我有 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/

相关文章:

mysql - 如何返回列中连续行与其他数据的差异 (mySQL)

c# - 连接子句中的一个表达式的类型在 Entity Framework 中不正确

mysql - 从一个数据源选择数据并将其存储在另一个数据源中

PHP 运行 1/2 没有正确验证的 IF 语句

sql - 如何根据可能更改的日期范围选择表格中的值

SQL SERVER 'Contains' 没有返回实际结果

mysql - 如何在不调用另一个查询的情况下获取此查询的总数?

php - 插入多个数据

SQL查询加入问题

mysql - 在 JOIN 中使用具有 'AS' 的字段的指定名称