我无法提出完成我所需要的查询。
我有三张这样的表:
client_files
-----------------------
client_id file_id
-----------------------
1 2
1 3
1 6
2 1
2 2
3 5
files
-------------------------------------------------
ID file_name file_category_id
-------------------------------------------------
1 file1.ext 1
2 file2.ext 3
3 file3.ext 1
4 file4.ext 1
5 file5.ext 2
6 file6.ext 2
file_categories
--------------------------
ID category_name
--------------------------
1 category1
2 category2
3 category3
我正在尝试构建一个查询,该查询将返回特定客户端ID的文件名和类别名称。
我期待的结果是(来自ID 1):
-----------------------------
file_name category_name
-----------------------------
file2.ext category3
file3.ext category1
file6.ext category2
据我了解,我需要将client_files
表加入files
表,然后加入file_categories
表。我查看了其他一些关于连接两个表的示例,其中第三个表将它们链接在一起,但相信这是另一种情况。
这相当于我提出的内容,但结果几乎是随机的,有些文件没有链接,有些文件丢失了。
SELECT
f.file_name,
fc.category_name
FROM
client_files cf,
files f,
file_categories fc
WHERE
cf.client_id = 1 AND f.ID = cf.file_id AND fc.ID = f.file_category_id;
答案 0 :(得分:1)
你可以用两种方式做到这一点,但事实上它基本上是相同的。
第一种方式:
SELECT
f.file_name,
fc.category_name
FROM
client_files cf
JOIN files f ON cf.file_id = f.id
JOIN file_categories fc ON fc.id = f.file_category_id
或者,第二种方式:
SELECT
f.file_name,
fc.category_name
FROM
(client_files cf
JOIN files f ON cf.file_id = f.id) data1
JOIN file_categories fc ON fc.id = data1.file_category_id
答案 1 :(得分:0)
你需要有适当的连接条件,现在你正在进行交叉连接,然后具有where条件。
SELECT
cf.client_id,
f.file_name,
fc.category_name
FROM
client_files cf
LEFT JOIN
files f ON cf.file_id = f.ID
LEFT JOIN
file_categories fc ON fc.ID = f.file_category_id
WHERE
cf.client_id = 1;
答案 2 :(得分:0)
尝试此查询:
SELECT files.file_name, file_categories.category_name
FROM ((files LEFT JOIN client_files ON files.ID = client_files.file_id)
LEFT JOIN file_categories ON files.file_category_id = file_categories.ID)
WHERE client_files.client_id = 1