mysql连接上的重复结果

mysql连接上的重复结果,mysql,sql,join,Mysql,Sql,Join,我的问题是: SELECT companies.id, companies.business_number, companies.country_iso_3, companies.profile_img, companies.short_url, companies_details_en.company_name FROM companies JOIN companies_details_en ON companies_details_en.company_id = companies.id L

我的问题是:

SELECT companies.id, companies.business_number, companies.country_iso_3, companies.profile_img, companies.short_url, companies_details_en.company_name
FROM companies
JOIN companies_details_en ON companies_details_en.company_id = companies.id
LEFT JOIN companies_main_activity_tags ON companies_main_activity_tags.company_id = companies_details_en.company_id
WHERE (
companies.id = '1'
OR companies.id = '3'
OR companies.id = '4'
OR companies.id = '5'
OR companies.id = '7'
OR companies.id = '20'
OR companies.id = '21'
OR companies.id = '22'
)
AND ((companies_main_activity_tags.val LIKE '%xxxx%') OR (companies_main_activity_tags.val LIKE '%yyyy%') OR companies_main_activity_tags.lang = 'en')
AND companies.id = companies_details_en.company_id
AND companies.id = companies_main_activity_tags.company_id
LIMIT 0 , 30
我想获得所有具有我想要的ID(ID列表)的公司,以及表
companys\u main\u activity\u tags.val
中具有输入的标记“yyyy”或“xxxxx”之一的公司作为其主要活动。但是我的查询会两次或更多地返回一些结果(取决于它们拥有的标记的数量)

我怎样才能解决这个问题

谢谢

试试这个:

SELECT DISTINCT companies.id, companies.business_number, companies.country_iso_3, companies.profile_img, companies.short_url, companies_details_en.company_name
FROM companies
JOIN companies_details_en ON companies_details_en.company_id = companies.id
LEFT JOIN companies_main_activity_tags ON companies_main_activity_tags.company_id = companies_details_en.company_id
WHERE (
companies.id = '1'
OR companies.id = '3'
OR companies.id = '4'
OR companies.id = '5'
OR companies.id = '7'
OR companies.id = '20'
OR companies.id = '21'
OR companies.id = '22'
)
AND ((companies_main_activity_tags.val LIKE '%xxxx%') OR (companies_main_activity_tags.val LIKE '%yyyy%') OR (companies_main_activity_tags.lang = 'en'))
AND companies.id = companies_details_en.company_id
AND companies.id = companies_main_activity_tags.company_id
LIMIT 0 , 30
试试这个:

SELECT DISTINCT companies.id, companies.business_number, companies.country_iso_3, companies.profile_img, companies.short_url, companies_details_en.company_name
FROM companies
JOIN companies_details_en ON companies_details_en.company_id = companies.id
LEFT JOIN companies_main_activity_tags ON companies_main_activity_tags.company_id = companies_details_en.company_id
WHERE (
companies.id = '1'
OR companies.id = '3'
OR companies.id = '4'
OR companies.id = '5'
OR companies.id = '7'
OR companies.id = '20'
OR companies.id = '21'
OR companies.id = '22'
)
AND ((companies_main_activity_tags.val LIKE '%xxxx%') OR (companies_main_activity_tags.val LIKE '%yyyy%') OR (companies_main_activity_tags.lang = 'en'))
AND companies.id = companies_details_en.company_id
AND companies.id = companies_main_activity_tags.company_id
LIMIT 0 , 30

使用
分组依据

SELECT c.id, c.business_number, c.country_iso_3, c.profile_img, c.short_url, c.company_name
  FROM companies c JOIN companies_details_en d 
    ON d.company_id = c.id LEFT JOIN companies_main_activity_tags t 
    ON t.company_id = d.company_id
WHERE c.id IN (1, 3, 4, 5, 7, 20, 21, 22)
  AND (   t.val LIKE '%xxxx%' 
       OR t.val LIKE '%yyyy%' 
       OR t.lang = 'en')
 GROUP BY c.id, c.business_number, c.country_iso_3, c.profile_img, c.short_url, c.company_name
LIMIT 0, 30

使用
分组依据

SELECT c.id, c.business_number, c.country_iso_3, c.profile_img, c.short_url, c.company_name
  FROM companies c JOIN companies_details_en d 
    ON d.company_id = c.id LEFT JOIN companies_main_activity_tags t 
    ON t.company_id = d.company_id
WHERE c.id IN (1, 3, 4, 5, 7, 20, 21, 22)
  AND (   t.val LIKE '%xxxx%' 
       OR t.val LIKE '%yyyy%' 
       OR t.lang = 'en')
 GROUP BY c.id, c.business_number, c.country_iso_3, c.profile_img, c.short_url, c.company_name
LIMIT 0, 30
关键字只能用于返回不同(不同)的值

关键字只能用于返回不同(不同)的值


您忘了为或条件开始括号“”,也忘了关闭和条件的括号。我已在我的答案中更新了您的查询,尝试解决您的问题。您忘了开始括号“('for OR condition,以及您忘记关闭括号for and condition。我已在我的答案中更新您的查询,尝试解决您的问题。@behz4d我已更新我的答案尝试更新答案这可能有效。谢谢,但我已使用
选择DISTINCT
@behz4d我已更新我的答案尝试更新答案可能有用。谢谢,但我已经用
SELECT DISTINCT