MySQL子查询检查

时间:2015-10-30 01:49:50

标签: mysql subquery

我有一个问题。 这是我的问题:

SELECT 
  branches.naam as branche_naam, 
  subbranches.naam as subbranche_naam, 
  specialiteiten.naam as specialiteiten_naam
FROM bedrijfgegevens
INNER JOIN subbranches on subbranches.id = company.subbranche_id 
INNER JOIN branches on branches.id = subbranches.branche_id 
INNER JOIN bedrijfgegevens_specialiteiten on bedrijfgegevens_specialiteiten.bedrijfgegevens_id = bedrijfgegevens.id 
INNER JOIN specialiteiten on specialiteiten.id = bedrijfgegevens_specialiteiten.specialiteiten_id 
WHERE bedrijfgegevens.id in 
  (SELECT 
    bedrijfgegevens.id FROM bedrijfgegevens 
  INNER JOIN subbranches on subbranches.id = bedrijfgegevens.subbranche_id     
  INNER JOIN branches on branches.id = subbranches.branche_id 
  INNER JOIN bedrijfgegevens_specialiteiten on bedrijfgegevens_specialiteiten.bedrijfgegevens_id = bedrijfgegevens.id 
  INNER JOIN specialiteiten on specialiteiten.id = bedrijfgegevens_specialiteiten.specialiteiten_id 
  WHERE branches.naam = "test" 
  AND subbranches.naam = "demo" 
  AND specialiteiten.naam = "bla")

我认为这是很长的方式,我使用相同的表格。 它的作用是: 子查询:获取“specialiteiten.naam”=“bla”的公司ID。 查询:从“bedrijf”获取另一个“specialiteiten”

1 个答案:

答案 0 :(得分:0)

一种方法是使用视图。

如果您希望将值放在单个分隔列表中,则可以使用group_concat()

SELECT bedrijfgegevens.id,
       GROUP_CONCAT(CONCAT_WS(':', branches.naam, subbranches.naam, specialiteiten.naam))
FROM bedrijfgegevens INNER JOIN
     subbranches
     on subbranches.id = company.subbranche_id INNER JOIN
     branches
     on branches.id = subbranches.branche_id INNER JOIN
     bedrijfgegevens_specialiteiten
     on bedrijfgegevens_specialiteiten.bedrijfgegevens_id = bedrijfgegevens.id INNER JOIN
     specialiteiten
     on specialiteiten.id = bedrijfgegevens_specialiteiten.specialiteiten_id 
GROUP BY bedrijfgegevens.id
HAVING SUM(branches.naam = 'test' AND subbranches.naam = 'demo' AND specialiteiten.naam = 'bla') > 0;