添加LEFT JOIN& INNER JOIN,合并到现有查询。
我有两张主表; “photoSearch”包含我的照片的所有可搜索数据,以及包含照片所有数据的“照片”。我在“photoSearch”的3个字段中使用FULLTEXT来获取相关的photoID,然后从“照片”表格中获取数据,如版权,尺寸,尺寸......
这是我的问题:
SELECT p.photoID, p.setID, p.headline, p.caption, p.height, p.width, p.size, p.copyright
FROM photos AS p,
(SELECT photoID FROM photoSearch WHERE MATCH (allPeople, allKeywords, shortCaption)
AGAINST ('+byline' IN BOOLEAN MODE) LIMIT 0,50) AS photoIDs
WHERE p.photoID = photoIDs.photoID;
我现在需要修改此查询以包含LEFT JOIN和INNER JOIN,它可以获取每张照片中显示的人物名称,以便在屏幕上打印。有些照片没有任何人,因此需要LEFT JOIN。我有两个表的数据(标准化); “photoPeople”和“people”,所以我想出了这个联接:
我的加入(需要添加上述查询)
LEFT JOIN ( photoPeople AS pp INNER JOIN people AS pe ON pp.peopleID = pe.PeopleID)
ON p.photoID = pp.photoID
但是我发现很难在原始查询中使用它,因为子选择查询在逗号分隔的FROM列表中 - 这让我感到困惑。我还想通过加入我不应该加入的地方来确保我不会影响FULLTEXT索引的性能。
我确实尝试在子选择之后(在WHERE之前)直接添加它但是我收到SQL错误,说它不能识别列p.photoID。
原始查询和数据库设计都不是我的。
感谢任何帮助或指导。
答案 0 :(得分:4)
SELECT
p.photoID,
p.setID,
p.headline,
p.caption,
p.height,
p.width,
p.size,
p.copyright,
pe.*
FROM
photos p
INNER JOIN
(
SELECT photoID
FROM photoSearch
WHERE MATCH (allPeople, allKeywords, shortCaption) AGAINST ('+byline' IN BOOLEAN MODE)
LIMIT 50
) pids ON p.photoID = pids.photoID
LEFT JOIN
photoPeople pp ON p.photoID = pp.photoID
LEFT JOIN
people pe ON pp.peopleID = pe.peopleID
我认为INNER JOIN
上的people
表格不需LEFT JOIN
,因为如果LEFT JOIN
为NULL
,people
}也将是NULL
答案 1 :(得分:0)
LEFT JOIN
( SELECT pp.photoID,name FROM photoPeople AS pp INNER JOIN people AS pe
ON pp.peopleID = pe.PeopleID) aa
ON p.photoID = aa.photoID