多行的内部连接

时间:2017-09-07 15:06:59

标签: php mysql sql symfony

我想使用Inner Join for Multiple Row。

我有一张表Company,与Market表有一个关系。

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;

如果设置这两个类,Doctrine会自动生成三个表。

我在下面设置了如下数据,这意味着Company A属于ITTrans。属于Company B的{​​{1}},Finance属于Comapny CIt

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

如果这个关系是onetoone我可以使用A 1 A 2 B 3 C 1 C 2 这样做但是,在这种情况下,c.markets是多个,所以它不起作用。

inner join

那我怎样才能得到这些结果?

1 个答案:

答案 0 :(得分:0)

我认为我不遵循你的说法,但是从你提供的数据中得到你想要的结果我做了这个:

首先创建临时表:

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

然后使用此查询:

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

获取此结果:

A   1
A   2
B   3
C   1
C   2