使用MySQL从两个联接表中列出用户

时间:2018-08-17 23:59:32

标签: mysql

我有两个表:

___酒店

|-------------|------------|
| HOT_HotelId | HOT_Name   |
|-------------|------------|
|           1 |    Hotel A |
|           2 |    Hotel B |
|-------------|------------|

___ UsersHotelsLink

|--------|------------|-------------|
| UHL_Id | UHL_UserId | UHL_HotelId |
|--------|------------|-------------|
|      1 |          1 |             |
|      2 |        131 |           1 |
|      3 |        131 |           2 |
|--------|------------|-------------|

我想为___Hotels中的用户列出___UsersHotelsLink中的酒店。

因此,我正在使用此工作查询:

SELECT * 
FROM ___UsersHotelsLink
LEFT JOIN ___Hotels 
    ON ___UsersHotelsLink.UHL_HotelId = ___Hotels.HOT_HotelId
WHERE HOT_Status != "inactive"
    AND UHL_Status != "inactive"
    AND UHL_UserId = 131
ORDER BY HOT_Creationdate ASC

当用户(131)在___Hotels表中有一家旅馆时,此功能起作用。但是,如果我将131替换为1(女巫是超级管理员),它将无法正常工作。它不返回任何行。

我想返回一行。

请问我在做什么错?

非常感谢。

1 个答案:

答案 0 :(得分:0)

我假设您的意思是希望没有hotelid的用户搜索时返回一行。假设这样,您的where条件否定了outer join,从而导致没有行返回。将其移至on条件,它应返回null酒店数据给用户:

SELECT * 
FROM ___UsersHotelsLink
LEFT JOIN ___Hotels 
    ON ___UsersHotelsLink.UHL_HotelId = ___Hotels.HOT_HotelId 
        AND HOT_Status != "inactive"
WHERE UHL_Status != "inactive"
    AND UHL_UserId = 131
ORDER BY HOT_Creationdate ASC