如何加入多个表

时间:2017-09-11 13:58:03

标签: mysql sql

这是我的数据库:

enter image description here contact_photocontact_video为2" 加入"表。他们有{strong>外键到my_contact表,外键photo/video表。

有一种方法,通过一个查询,从my_contact.id的值开始检索这5个表中的所有记录吗?

我知道如何加入,例如my_contactcontact_photophoto,  但我不知道如何将这5张桌子加在一起。

我试过了:

 query = "SELECT * " +
           "FROM my_contact m " +
           "INNER JOIN contact_photo cp ON ( m._id = cp.id_contact ) " +
           "INNER JOIN photo p ON ( cp.id_photo = p._id) " +
           "INNER JOIN contact_video cv ON ( m._id = cv.id_contact ) " +
           "INNER JOIN video v ON ( cv.id_video = v._id) ";

但我没有记录,即使my_contactcontact_photophoto有记录(contact_videovideo都是空表)。我的逻辑有什么不对吗?

我想得到的结果是这样的记录:

--------------------------------------------------------------------------
| my_contact._id | photo.id_photo_on_device | photo.uri                  |
--------------------------------------------------------------------------
|       1        |            23            | C:\PROGRAM|....            |
--------------------------------------------------------------------------


--------------------------------------------------------------------------
| my_contact._id | video.id_video_on_device | video.uri                  |
--------------------------------------------------------------------------
|       1        |            36            | C:\PROGRAM|....            |
--------------------------------------------------------------------------

实际上,查看我希望得到的记录似乎在我的逻辑中出现了问题。

1 个答案:

答案 0 :(得分:0)

我建议使用union all查询。结构将类似于:

select c.uri
, c.i_contact_on_device
, other useful fields
from my_contact c join contact_photo cp on c._id = cp.id_contact
join photo p on p._id = cp.id_photo
union all
same general idea, but for videos

请注意,并非所有字段都有用。例如,即使您想要my_contact中的_id字段,您可能只需要一次。这就是为什么从联结表中选择字段的原因可能是不必要的。