简体   繁体   中英

MySQL Subquery check

I have a question. This is my query:

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

I think it's way to long and I am using the same tables. What it does is: subquery : get the company id where "specialiteiten.naam" = "bla". query : get the other "specialiteiten" from that "bedrijf"

One method is to use a view.

If you want the values in a single delimited list, you can use 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;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM