具有多个连接的Mysql查询,第一个表重复不正确

时间:2013-06-12 21:47:13

标签: mysql join

说我有3张桌子:

  • 为person_id
  • 如first_name
  • 姓氏

person_company:

  • 为person_id
  • COMPANY_ID

company_address:

  • company_address_id
  • COMPANY_ID
  • ADDRESS_ID

我有一个如此的mysql查询:

SELECT * FROM person 
JOIN (
    person_company, 
    company_address
) 
ON ( 
    person.person_id = person_company.person_id 
    && person_company.company_id = company_address.company_id 
)

然而,当我使用查询时,我在第一个表中的第一个条目重复约20次,然后在那之后还有几个“团块”。问题是,这会产生一个不正确的行,就像John Smith对公司A,B,C和D不起作用。

我认为这个问题可能与我所做的我不知道的假设有关。

2 个答案:

答案 0 :(得分:1)

你的JOIN语法有点奇怪,你可以通过一次连接一个表来获得更好的结果。我还在表中添加了别名,但如果你多次加入同一个表,那么它不是100%需要的。

SELECT 

    -- Probably best too select specific fields here as, for example,
    -- person_id exists in both person and person_company
    p.person_id,
    p.first_name,
    p.last_name,
    c.company_id,
    c.company_address_id,
    c.address_id     

FROM person AS p

-- First up join person_company to person as your query indicates an n:1 there
INNER JOIN person_company AS pc
    ON pc.person_id = p.person_id

-- Next join company_address to person_company, again as your query indicates n:1
INNER JOIN company_address ca
    ON ca.company_id = pc.company_id

如果仍然无效,则问题出在您的数据而不是查询中!

答案 1 :(得分:1)

我无法识别您的JOIN语法。这是如何工作的?

SELECT *
FROM person
JOIN person_company ON person.person_id = person_company.person_id
JOIN company_address ON person_company.company_id = company_address.company_id