我有一个categories
表和一个files
表。有一个category_record_mm
表用于存储关系。
我想要获取文件的类别,为此我写了JOIN
语句,但是JOIn抱怨files
。uid
不是有效的列。我实际想要的是,如果category_record_mm
。foreign_uid
等于某个id,它应该给我所有类别。
这是我写的:
SELECT * FROM `categories`
LEFT JOIN `category_record_mm` ON `category_record_mm`.`foreign_uid` = `files`.`uid`
WHERE (`category_record_mm`.`foreign_uid` = 123 )
答案 0 :(得分:1)
您缺少1个JOIN
,介于categories
和category_record_mm
之间的那个
这就像有三个城镇,A
,B
和C
,在A
和B
之间有一座桥梁,在{{1 }}和B
。如果不使用C
和A
之间的桥梁,就无法从C
到A
B
SELECT * FROM `categories`
LEFT JOIN `category_record_mm` ON `category_record_mm`.`categories_uid` = `categories`.`uid`
LEFT JOIN `files` ON `category_record_mm`.`foreign_uid` = `files`.`uid`
WHERE (`category_record_mm`.`foreign_uid` = 123 )
是引用表categories_uid
和categories
的外键。categories
是uid
的主键
答案 1 :(得分:1)
如果只需要类别,则无需引用files
表。您只需要正确表达查询语句即可:
SELECT c.*
FROM categories c JOIN
category_record_mm cr
ON cr.categories_uid = c.uid
WHERE cr.foreign_uid = 123;
注意:
JOIN
在 category 列上,而不是在 file 列上。category_record_mm
中有文件uid。您正在对此进行过滤,因此无需加入files
表。