2013-04-25 148 views
0

我有我想要使用MySQL的SQL查询来加入以下的OFBiz表:多表连接和查询

  1. USER_LOGIN
  2. PERSON
  3. PARTY_CONTACT_MECH
  4. CONTACT_MECH
  5. TELECOM_NUMBER
  6. POSTAL_ADDRESS
  7. PARTY

USER_LOGIN, PERSONPARTY_CONTACT_MECH都含有外键"PARTY_ID",在PARTY引用表中的主键"PARTY_ID"

PARTY_CONTACT_MECH, TELECOM_NUMBERPOSTAL_ADDRESS都有外键"CONTACT_MECH_ID"引用的表CONTACT_MECH主键"PARTY_ID"

由于PARTY_CONTACT_MECH还涉及所述第一组上"PARTY_ID"上面列出的表的,并且还与第二组表上"CONTACT_MECH_ID",两组或相当的所有表,因此可以在这两个键"PARTY_ID""CONTACT_MECH_ID" JOINED 。

我的问题是:

  • 如何加入所有这些表查询以下字段:

PARTY.PARTY_ID, 
USER_LOGIN.USER_LOGIN_ID, 
PERSON.FIRST_NAME, 
CONTACT_MECH.CONTACT_MECH_ID, 
POSTAL_ADDRESS.CITY, 
TELECOM_NUMBER.CONTACT_NUMBER. 
+2

你可以用你的数据库模式做一个[SQLFiddle](http://sqlfiddle.com/)吗? – 2013-04-25 16:32:42

+0

或只是一点点的格式化... – Kermit 2013-04-25 16:36:35

+0

既然你知道你有加入他们的钥匙,什么阻止你写查询? – 2013-04-25 16:41:45

回答

0

你想加入的所有表与他们的主键来调用其他表的外键。外键实质上是其他表的主键。这样可以使用外键而不是将多余的列添加到表中。

在您的某些表格上,您想加入多个值。有了这个,你只需要让你的JOIN ON table1.var1 = table2.var2 AND table1.var1 = table3.var3,反之亦然。

你有很多的表,所以我会尽我可以:

SELECT 
    PARTY.PARTY_ID 
    , USER_LOGIN.USER_LOGIN_ID 
    , PERSON.FIRST_NAME 
    , CONTACT_MECH.CONTACT_MECH_ID 
    , POSTAL_ADDRESS.CITY 
    , TELECOM_NUMBER.CONTACT_NUMBER 
FROM `PARTY` 
    JOIN `USER_LOGIN` 
    ON PARTY.PARTY_ID = USER_LOGIN.PARTY_ID 
    JOIN `PERSON` 
    ON PARTY.PARTY_ID = PERSON.PARTY_ID 
    JOIN `PARTY_CONTACT_MECH` 
    ON PARTY.PARTY_ID = PARTY_CONTACT_MECH.PARTY_ID AND CONTACT_MECH.PARTY_ID = PARTY_CONTACT_MECH.CONTACT_MECH_ID 
    JOIN `TELECOM_NUMBER` 
    ON CONTACT_MECH.PARTY_ID = TELECOM_NUMBER.CONTACT_MECH_ID 
    JOIN `POSTAL_ADDRESS` 
    ON CONTACT_MECH.PARTY_ID = POSTAL_ADDRESS.CONTACT_MECH_ID 

就像我说的,这是非常难以跟上所有的表和列时不可见他们,但希望加入声明可以帮助你看到如何去做。

+0

这将不起作用,如果tom,dick和harry whent参加聚会,那么user_login和person表将无法判断哪个登录名随同哪个人。 OP需要提供更多信息。 – Hogan 2013-04-25 18:17:11