0

假设我有 3 张桌子:

人:

  • person_id

个人公司:

  • person_id
  • company_id

公司地址:

  • 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 公司。

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

4

2 回答 2

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

如果这仍然不起作用,那么问题出在您的数据而不是查询中!

于 2013-06-12T21:51:36.497 回答
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
于 2013-06-12T21:52:18.450 回答