【问题标题】:Search columns in two tables: ERROR 1066 (42000): Not unique table/alias在两个表中搜索列:ERROR 1066 (42000): Not unique table/alias
【发布时间】:2019-04-16 07:40:41
【问题描述】:

我在尝试以下查询时收到此错误。我有一个名为 access_groups 的表,一个名为 Companies,还有一个名为 access_group_companies 的连接表。我正在尝试使用 company.name 和 access_groups.name 中的字段使用 AND 逻辑运行搜索。知道是什么原因造成的吗?如果您可能知道运行此搜索的更好方法,那就太好了。

SELECT ag.id, ag.name, c.name
FROM access_groups ag,
     companies c
         JOIN ag ON ag.id = access_group_companies.access_group_id
WHERE CONCAT(ag.name, c.name) LIKE '%ВТБ%';

【问题讨论】:

  • access_groupscompanies 的共同列是什么?你在companies 表中也有id 吗?
  • 不要混合隐式和显式连接...在任何地方使用现代、显式的JOIN 语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接!
  • 你能澄清一下隐式和显式吗?我以为我只是在这里做一个通用的加入
  • 最后一部分应该更像“LIKE %Тест ВТБ”...这有问题

标签: mysql sql


【解决方案1】:

根据您提供的信息,假设companies(id) 中有连接列,可以与access_group_companies(company_id) 连接。

SELECT ag.id, ag.name, c.name 
FROM access_groups ag 
INNER JOIN access_group_companies agc ON ag.id = agc.access_group_id 
INNER JOIN companies c ON c.id = agc.company_id
WHERE CONCAT(ag.name, c.name) LIKE '%ВТБ%';

【讨论】:

  • 这很好,但如果我有多个搜索词,例如“test 123”,它就不起作用
  • 结果应该有一些出现在从两列产生的字符串中
  • 不确定我是否在ag.namec.name 两列上都遵循您想要的条件。也许你想要ag.name LIKE '%test 123%' OR c.name LIKE '%test 123%'
  • 是的,可能有多个单词 - ag.name 或 c.name
  • 您需要在空格上分割单词,并为每个单词添加一个LIKE 条件。 ag.name LIKE '%test%' OR ag.name LIKE '%123%' OR c.name LIKE '%test%' OR c.name LIKE '%123%'。可能这个答案就是你要找的stackoverflow.com/questions/7129355/…
猜你喜欢
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 2015-07-16
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多