MYSQL - 加入三个表(连续?)

时间:2016-10-13 21:17:04

标签: mysql

我无法提出完成我所需要的查询。

我有三张这样的表:

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;

3 个答案:

答案 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