这是我的数据库:
contact_photo
和contact_video
为2" 加入"表。他们有{strong>外键到my_contact
表,外键到photo/video
表。
有一种方法,通过一个查询,从my_contact.id
的值开始检索这5个表中的所有记录吗?
我知道如何加入,例如my_contact
,contact_photo
和photo
,
但我不知道如何将这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_contact
,contact_photo
和photo
有记录(contact_video
和video
都是空表)。我的逻辑有什么不对吗?
我想得到的结果是这样的记录:
--------------------------------------------------------------------------
| 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|.... |
--------------------------------------------------------------------------
实际上,查看我希望得到的记录似乎在我的逻辑中出现了问题。
答案 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字段,您可能只需要一次。这就是为什么从联结表中选择字段的原因可能是不必要的。