连接mysql中的表,而其中一个表不可访问

时间:2017-04-27 07:48:10

标签: mysql

我写了一个连接3个表的查询:

SELECT `notification`.`nid`, `notification`.`type`, `notification`.`read`, `notification`.`time`, `user`.`pro_img`, `user`.`fname` ,`user`.`lname`, `user`.`username`, `accommodation`.`aid`, `accommodation`.`title`, `accommodation`.`home_img`
 FROM `notification` RIGHT OUTER JOIN `user` ON `notification`.`rid`=`user`.`id` RIGHT OUTER JOIN `accommodation` ON `notification`.`acco_id`=`accommodation`.`aid`
 WHERE `notification`.`uid`=$uid ORDER BY `notification`.`time` DESC;

我希望在notification时获得结果。acco_id = accommodation。找不到aid,所以空列可以,但我想要行

1 个答案:

答案 0 :(得分:1)

您的查询结合了一些不合适的内容。您正在使用的right joins将保留右侧表格中的所有内容,在您的情况useraccomodation中,但使用其中两个具有相同左侧的内容将使这无用。您where中的条件也涉及joins的左侧,这也会使right joins毫无意义。

假设您想要所有notifications,无论它们是否与usersaccomodations匹配,您只需要从right更改为left joins }。

SELECT  notification.nid,
        notification.type,
        notification.read,
        notification.time,
        user.pro_img,
        user.fname,
        user.lname,
        user.username,
        accommodation.aid,
        accommodation.title,
        accommodation.home_img
FROM    notification
LEFT OUTER JOIN
        user
ON      notification.rid = user.id
LEFT OUTER JOIN
        accommodation
ON      notification.acco_id = accommodation.aid
WHERE   notification.uid = $uid
ORDER BY notification.time DESC

这将保留notification中的所有行,并且当其他表上没有匹配的行时,它们将与null值匹配。