2015-10-30 67 views
0

我有问题。 这是我的查询:MySQL子查询检查

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") 

我认为这办法很长,我使用相同的表。 它的功能是: 子查询:获取公司id“where specialiteiten.naam”=“bla”。 查询:从该“bedrijf”获取其他“specialiteiten”

回答

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;