MySQL Query选择JOIN表中不存在id的位置

时间:2012-01-08 09:56:24

标签: mysql join

我想知道一个MySQL查询来解决这个问题:

我有一个由成员ID和位置ID组成的表。

_________________________________________________________
|      |                        |                        |
| ID   |  Member Id             |       Location         |
|______|________________________|________________________|
|      |                        |                        |
| 1    |    2371                |           7            |
|      |                        |                        |
| 2    |    5123                |          10            |
|      |                        |                        |
| 3    |    2371                |           9            |
|      |                        |                        |
| 4    |    5123                |           9            |
|      |                        |                        |
| 5    |     565                |           9            |
|      |                        |                        |
| 6    |    2371                |           5            |
|      |                        |                        |
| 7    |    5123                |           6            |
|      |                        |                        |
|______|________________________|________________________|

另一个表包含所有位置数据:

__________________________________________________
|                        |                        |
|  Location Id           |       Location Name    |
|________________________|________________________|
|                        |                        |
|      1                 |           ABC          |
|                        |                        |
|      2                 |           BCD          |
|                        |                        |
|      3                 |           CDE          |
|                        |                        |
|      4                 |           DEF          |
|                        |                        |
|      5                 |           EFG          |
|                        |                        |
|      6                 |           GHI          |
|                        |                        |
|      7                 |           HIJ          |
|                        |                        |
|      8                 |           IJK          |
|                        |                        |
|      9                 |           JKL          |
|________________________|________________________|

我想从表中找不到成员ID 2371的所有位置ID。如何在单个查询中找到它?我知道如果我将查询分成两部分,我就可以做到这一点。就像所有位置的数组一样......以及存在成员id的所有位置的数组。然后使用PHP的!in_array函数

感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:1)

您可以通过以下方式找到成员2371所在的所有位置:

SELECT location 
FROM memberlocation
WHERE memberid = 2371

您可以通过以下方式找到所有其他位置(您想要的位置):

SELECT * 
FROM location 
WHERE locationid NOT IN 
    ( SELECT location 
      FROM memberlocation
      WHERE memberid = 2371)

答案 1 :(得分:0)

您可以使用以下联接查询按MemberID筛选结果:

SELECT l.LocationName FROM MemberLocations AS ml
INNER JOIN Locations AS l ON ml.Location = l.LocationID
WHERE ml.MemberID != 2371