背景 我正在建立一个图片数据库来管理我制作的所有照片。我有很多RAW文件(底片)和很多JPG文件(副本)。大多数JPG是RAW文件的编辑版本,但是一些JPG没有一个同步的RAW文件(例如我用智能手机拍摄的照片)。 因此,图片可以包含单个JPG文件或JPG以及相应的RAW文件。
我想明确区分两种情况:
这就是我的数据库目前的样子:
SELECT * FROM pictures
*------*------------*------------*--------*
| p_id | p_complete | p_negative | p_copy |
*------*------------*------------*--------*
| 1 | true | 1 | 2 |
| 2 | true | null | 3 |
| 3 | false | null | 4 |
*------*------------*------------*--------*
SELECT * FROM files
*------*--------*
| f_id | f_path |
*------*--------*
| 1 | a.raw |
| 2 | a.jpg |
| 3 | b.jpg |
| 4 | c.jpg |
*------*--------*
我想要的是构建一个查询来获取所有图片。结果应该是:
*----*----------*----------*-------*
| id | complete | negative | copy |
*----*----------*----------*-------*
| 1 | true | a.raw | a.jpg |
| 2 | true | null | b.jpg |
| 3 | false | null | c.jpg |
*----*----------*----------*-------*
我尝试了什么:
SELECT p_id as id,
p_complete as complete,
f1.f_path as negative,
f2.f_path as copy
FROM pictures as p,
files as f1,
files as f2
WHERE ((f1.f_id = p.p_negative) OR (p.p_negative=null)) AND
f2.f_id = p.p_copy
结果是:
*----*----------*----------*-------*
| id | complete | negative | copy |
*----*----------*----------*-------*
| 1 | true | a.raw | a.jpg |
*----*----------*----------*-------*
我不想要的。
我应该改变我的设计,如果是,怎么做? 或者是否可以编写一个我想要的查询?
答案 0 :(得分:0)
SELECT a.p_id id, a.p_complete complete, b.f_path negative, c.f_path copy FROM pictures a
left join files b on a.p_negative=b.f_id
left join files c on a.p_copy=c.f_id