简体   繁体   English

多行的内部联接

[英]Inner Join for Multiple Row

I would like to use Inner Join for Multiple Row. 我想对多行使用内部联接。

I have a table Company which has oneToMany relationship with Market Table. 我有一个表, 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;

If set these two classes, Doctrine makes three tables automatically. 如果设置了这两个类,Doctrine将自动创建三个表。

And I set data like these below, These means Company A belonging to IT , Trans . 我在下面设置这些数据,这些意味着属于IT Company A Trans Company B belonging to Finance , Comapny C belonging to It , Trans Company B属于FinanceComapny C属于ItTrans

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 this case, What I want to have is like this ,every combination of Companys and Sectors 在这种情况下,我想要拥有的就是公司和部门的每个组合

A 1
A 2
B 3
C 1
C 2

If this relation ship is onetoone I could get like this with inner join However, in this case c.markets are multiple, so it doesn't work. 如果这种关系是一对一的,我可以通过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()

So How can I get these result ?? 那么我如何获得这些结果?

I don't think I follow what your saying but to get your desired results from the data you provided i did this: 我认为我没有听从您的意思,而是为了从您提供的数据中获得理想的结果,我做到了:

First create temp tables: 首先创建临时表:

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

Then use this query: 然后使用以下查询:

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

Gets this result: 得到这个结果:

A   1
A   2
B   3
C   1
C   2

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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