我想知道一个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函数
感谢您的时间和帮助。
答案 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