2017-09-07 2 views
2

Ich möchte Inner Join für mehrere Zeilen verwenden.Innerer Join für mehrere Zeilen

Ich habe eine Tabelle Company, die OneToMany Beziehung mit Market Tabelle hat.

class Company 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
    /** 
    * @ORM\ManyToMany(targetEntity="Market",cascade={"persist"}) 
    * @ORM\JoinTable(name="companys_markets", 
    *  joinColumns={@ORM\JoinColumn(name="company_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="market_id", referencedColumnName="id")} 
    *  ) 
    */ 
    private $markets; 

class Market 
{  
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(type="string",nullable=false,unique=true) 
    */ 

    private $name; 

Wenn diese beiden Klassen gesetzt, macht Lehre drei Tabellen automatisch.

Und ich setze Daten wie diese unten, diese Company A gehören zu IT, Trans. Company B zu Finance gehören, Comapny C-It gehören, Trans

Company Table 
id bane 
1 A 
2 B 
3 C 

companys_markets Table 
company_id sector_id 
1   1 
1   2 
2   3 
3   1 
3   2 

Sector Table 
Id name 
1 IT 
2 Trans 
3 Finance 

In diesem Fall will, was ich ist wie diese haben, jede Kombination von Companys und Branchen

A 1 
A 2 
B 3 
C 1 
C 2 

Wenn diese Beziehung Schiff OneToOne ist Ich könnte so mit inner join bekommen, aber in diesem Fall c.markets sind mehrere, so dass es nicht funktioniert.

$this->em->createQuery(
     "SELECT c.name,c.code,m.name as marketName FROM UserBundle:Company c 
Inner join UserBundle:Market m with m.id = c.markets where c.enabled = true")->getResult() 

Also wie kann ich diese Ergebnisse bekommen ??

+0

Was stimmt nicht mit dem Ergebnis? – Eric

+0

Das Ergebnis ist ein ideales Ergebnis. Ich würde gerne wissen, wie ich das bekomme. @Eric – whitebear

Antwort

0

Ich glaube nicht, ich folge Sie sagen aber die gewünschten Ergebnisse aus den Daten zu erhalten Ihnen zur Verfügung gestellten ich dies tat:

Zuerst erstellen temporäre Tabellen:

declare @Company Table (id int, bane varchar(1)) 
insert into @Company values 
(1,'A'), 
(2,'B'), 
(3,'C') 

declare @companys_markets Table (company_id int, sector_id int) 
insert into @companys_markets values 
(1,1), 
(1,2), 
(2,3), 
(3,1), 
(3,2) 

declare @Sector Table (Id int, name varchar(40)) 
insert into @Sector values 
(1, 'IT'), 
(2, 'Trans'), 
(3, 'Finance') 

Dann diese Abfrage verwenden:

select 
c.bane,s.Id 
from @companys_markets cm 
inner join @Company c on cm.company_id = c.id 
inner join @Sector s on cm.sector_id = s.Id 

Ruft dieses Ergebnis:

A 1 
A 2 
B 3 
C 1 
C 2 
Verwandte Themen