0

我在我的数据库中创建了一个名为“ people ”的视图,它使用名为“ isUserVerified ”、“ hasUserPicture ”和“ userHobbies ”的三个函数从名为“ users ”和“ user_hobbies ”的两个表中检索数据:

SELECT 
    `people`.`users`.`id` AS `id`,
    `isUserVerified`(`people`.`users`.`id`) AS `verification`,
    `hasUserPicture`(`people`.`users`.`id`) AS `profile_picture`,
    `userHobbies`(`people`.`user_hobbies`.`user_id`) AS `hobbies` 
FROM 
    (`people`.`users` INNER JOIN `people`.`user_hobbies`) 
ON 
    `people`.`user_hobbies`.`user_id` = `people`.`user_hobbies`.`user_id` 
WHERE 
    `people`.`user_hobbies`.`user_id` = `people`.`user_hobbies`.`user_id` 

phpMyAdmin 抱怨一个意外的点(以下行中的最后一个(在 user_id 之前):

ON 
    `people`.`user_hobbies`.`user_id` =

和上面相同行中 = 之前的意外标记。考虑到我的视图使用连接到相关表的函数,JOIN 是从两个表中检索数据的正确方法吗?如果是的话,谁能告诉我我的 SQL 出了什么问题。谢谢

4

1 回答 1

2

您的语法不正确;该FROM子句不应括在括号中。此外,您的JOIN情况可能应该是

`people`.`user_hobbies`.`user_id` = `people`.`users`.`id`

并且您的WHERE条件是多余的,因为它与JOIN条件相同。试试这个(请注意,我为表名加上别名以简化查询):

SELECT 
    `u`.`id` AS `id`,
    `isUserVerified`(`u`.`id`) AS `verification`,
    `hasUserPicture`(`u`) AS `profile_picture`,
    `userHobbies`(`h`.`user_id`) AS `hobbies` 
FROM 
    `people`.`users` u
INNER JOIN
    `people`.`user_hobbies` h
ON 
    `h`.`user_id` = `u`.`id` 
于 2019-08-11T08:12:42.317 回答