[英]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将自动创建三个表。
我在下面设置这些数据,这些意味着属于IT
Company A
Trans
。 Company B
属于Finance
, Comapny C
属于It
, 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
在这种情况下,我想要拥有的就是公司和部门的每个组合
A 1
A 2
B 3
C 1
C 2
如果这种关系是一对一的,我可以通过inner join
联接得到这样的结果。但是,在这种情况下,c.markets是多个的,所以它不起作用。
$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()
那么我如何获得这些结果?
我认为我没有听从您的意思,而是为了从您提供的数据中获得理想的结果,我做到了:
首先创建临时表:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.